【问题标题】:Java: remove < and > from text in XML (not tags)Java:从 XML 中的文本(不是标签)中删除 < 和 >
【发布时间】:2020-06-16 19:34:03
【问题描述】:

我很难转义要由 Java 处理的 xml。我正在使用 JTidy 来转义不需要的字符,但很难从 &lt;tag&gt; capacity &lt; 1000 &lt;/tag&gt;

等值中删除“”

我正在使用下面的代码来转义输入

    public String CleanXML(String input){

        Tidy tidy = new Tidy();
        tidy.setInputEncoding("UTF-16");
        tidy.setOutputEncoding("UTF-16");
        tidy.setWraplen(Integer.MAX_VALUE);
        tidy.setXmlOut(true);
        tidy.setSmartIndent(true);
        tidy.setXmlTags(true);
        tidy.setMakeClean(true);
        tidy.setForceOutput(true);
        tidy.setQuiet(true);
        tidy.setShowWarnings(false);
        StringReader in = new StringReader(input);
        StringWriter out = new StringWriter();
        tidy.parse(in, out);

        return out.toString();
    }

【问题讨论】:

  • &lt;tag&gt; capacity &lt; 1000 &lt;/tag&gt; 的期望值是多少?
  • Id 使用类似: capacity esc(
  • 您从哪种输入开始?包含两个标签(如&lt;a&gt;)和未转义尖括号(如size &lt; 7)的字符串?这是相当肮脏的输入,看看它是如何创建的,并尝试创建一些更干净的东西,而不是事后收拾烂摊子。
  • 我喜欢..,但问题是数据来自世界各地的技术人员平板电脑,这个选项有点不真实..

标签: java xml jtidy


【解决方案1】:

如果您想删除 XML 的标签终端,只需将其转换为地图并根据需要构建字符串,请参阅 XML to map in Java

如果你想清理属性值,你可以迭代 map 并清理它,然后构建一个字符串或通过map to XML in java将其重新转换为 XML

【讨论】:

  • 您好,感谢您的回答,但我们使用的是接受纯 UTF-8 格式的 XML 字符串的服务总线。在将其解析为 XML 对象之前,我需要对该字符串进行转义,因此除非我解析字符串(以防它在值中包含“
  • 你没有尝试对字符串进行 ASCII 值范围检查吗?
  • 我没有..你将如何实现它?
  • 在下面的答案中试试这个功能。
【解决方案2】:

使用以下功能

private static final Pattern TAG_REGEX = Pattern.compile("<tag>(.+?)</tag>", Pattern.DOTALL);

public String CleanXML(String input){
    final Matcher matcher = TAG_REGEX.matcher(input);
    while (matcher.find()) {
        String value = matcher.group(1);
        String valueReplace = value.replaceAll("[^a-zA-Z0-9\\s]", "");
        input.replace(value,valueReplace);
    }
    return input;        
}

它使用正则表达式搜索来获取标签之间的值,然后删除所有非字母数字字符。正则表达式和基本思想来源于Java regex to extract text between tags

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2023-03-06
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多