我需要取消扫描包含转义xml标记的xml字符串:
<
>
&
etc...
我确实找到了一些可以执行此任务的库,但我宁愿使用可以执行此任务的单个方法。
有人能帮忙吗?
干杯,Bas Hendriks
这是我用十分钟写的一个。它不使用正则表达式,只使用简单的迭代。我不认为这可以增强得更快。
public static String unescape(final String text) {
StringBuilder result = new StringBuilder(text.length());
int i = 0;
int n = text.length();
while (i < n) {
char charAt = text.charAt(i);
if (charAt != '&') {
result.append(charAt);
i++;
} else {
if (text.startsWith("&", i)) {
result.append('&');
i += 5;
} else if (text.startsWith("'", i)) {
result.append('\'');
i += 6;
} else if (text.startsWith(""", i)) {
result.append('"');
i += 6;
} else if (text.startsWith("<", i)) {
result.append('<');
i += 4;
} else if (text.startsWith(">", i)) {
result.append('>');
i += 4;
} else i++;
}
}
return result.toString();
}
这里有一个简单的方法来取消浏览XML。它处理预定义的XML实体和十进制数字实体(
public static String unescapeXML( final String xml )
{
Pattern xmlEntityRegex = Pattern.compile( "&(#?)([^;]+);" );
//Unfortunately, Matcher requires a StringBuffer instead of a StringBuilder
StringBuffer unescapedOutput = new StringBuffer( xml.length() );
Matcher m = xmlEntityRegex.matcher( xml );
Map<String,String> builtinEntities = null;
String entity;
String hashmark;
String ent;
int code;
while ( m.find() ) {
ent = m.group(2);
hashmark = m.group(1);
if ( (hashmark != null) && (hashmark.length() > 0) ) {
code = Integer.parseInt( ent );
entity = Character.toString( (char) code );
} else {
//must be a non-numerical entity
if ( builtinEntities == null ) {
builtinEntities = buildBuiltinXMLEntityMap();
}
entity = builtinEntities.get( ent );
if ( entity == null ) {
//not a known entity - ignore it
entity = "&" + ent + ';';
}
}
m.appendReplacement( unescapedOutput, entity );
}
m.appendTail( unescapedOutput );
return unescapedOutput.toString();
}
private static Map<String,String> buildBuiltinXMLEntityMap()
{
Map<String,String> entities = new HashMap<String,String>(10);
entities.put( "lt", "<" );
entities.put( "gt", ">" );
entities.put( "amp", "&" );
entities.put( "apos", "'" );
entities.put( "quot", "\"" );
return entities;
}
StringEscapeUtils.unescapeXml(xml)
(commons lang,下载)
问题内容: 我在这里尝试了答案已删除golang但go命令仍然有效?,但是没有用(我仍然可以运行go) 目前,当我运行时,我看到此输出 我指的是我有两个安装的go,因为我指向另一个名为的文件夹。我现在已经删除了该文件夹以及该文件夹。 我还删除了我的。但是,我仍然可以运行。 如何卸载golang? 问题答案: 你可以试试 然后删除例如中的任何提及;那么您至少需要注销并登录。 但是,这样做时要小心。如
问题内容: 这可能很简单,但是我在任何地方都找不到任何提示。那么,一般来说,尤其是在Mac上,应该怎么做呢? 问题答案: 如果您使用http://jenkins-ci.org/中的官方Jenkins Mac安装程序进行安装,则这些说明适用。 从终端执行卸载脚本: 或使用Finder导航到该文件夹,然后双击Uninstall.command。 最后删除 可能 已经忘记的最后配置位: 如果找不到卸
我的机器上安装了PostGis,不知怎的,一些文件被破坏了。我想卸载并重新安装PostGIS,希望它能重新工作,但我不知道该怎么做。 我正在运行Windows 8.1。我试着在控制面板的
问题内容: 我运行了以下命令: 我该如何反转这两个命令以使我的python返回OSX的原始状态?(删除点子作为其中的一部分) 问题答案: 您应该尝试的第一件事是: 在许多无法正常工作的环境中。因此,鉴于缺乏有关该问题的信息,我最终从/ usr / local / bin中手动删除了pip。
我运行了以下命令: 如何反转这两个命令以使python恢复到OSX中的原始状态?(将pip作为其一部分移除)
Mac电脑也遇到了类似的问题:如何卸载Jenkins? 如何在Windows上执行相同操作(特别是如果我使用Jenkins Windows安装程序安装Jenkins)? 我建议的卸载计划如下,但我不确定它是否是正确的方式: 通过执行Jenkins卸载Jenkins Windows服务。exe从命令行卸载(如下所示:https://wiki.jenkins-ci.org/display/JENKIN