2

我很难转义要由 Java 处理的 xml。我正在使用 JTidy 来转义不需要的字符,但很难从值中删除“<”和“>”,例如<tag> capacity < 1000 </tag>

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

    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();
    }
4

2 回答 2

1

使用以下功能

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 中获得的,用于提取标签之间的文本

于 2020-03-05T03:10:17.287 回答
0

如果要删除 XML 的标记终端,只需将其转换为映射并根据需要构建字符串,将XML 引用到 Java 中的映射

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

于 2020-03-04T10:44:10.240 回答