当前位置: 首页 > 知识库问答 >
问题:

如何在java中卸载XML

壤驷棋
2023-03-14

我需要取消扫描包含转义xml标记的xml字符串:

<
>
&
etc...

我确实找到了一些可以执行此任务的库,但我宁愿使用可以执行此任务的单个方法。

有人能帮忙吗?

干杯,Bas Hendriks

共有3个答案

子车海
2023-03-14

这是我用十分钟写的一个。它不使用正则表达式,只使用简单的迭代。我不认为这可以增强得更快。

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("&amp;", i)) {
                result.append('&');
                i += 5;
            } else if (text.startsWith("&apos;", i)) {
                result.append('\'');
                i += 6;
            } else if (text.startsWith("&quot;", i)) {
                result.append('"');
                i += 6;
            } else if (text.startsWith("&lt;", i)) {
                result.append('<');
                i += 4;
            } else if (text.startsWith("&gt;", i)) {
                result.append('>');
                i += 4;
            } else i++;
        }
    }
    return result.toString();
}
白昊东
2023-03-14

这里有一个简单的方法来取消浏览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;
}
苏宏逸
2023-03-14
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