Java库可以逃避/清理XML吗?

时间:2011-12-13 12:39:54

标签: java html xml tags escaping

我收到了一些格式错误的xml文本输入,如:

"<Tag>something</Tag> 8 > 3, 2 < 3, ... <Tag>something</Tag>"

我想清理输入以获得:

"<Tag>something</Tag> 8 &gt; 3, 2 &lt; 3, ... <Tag>something</Tag>"

也就是说,逃避像&lt;,&gt;这样的特殊符号。并保留有效标签(“<Tag>something</Tag>,注意,具有相同的情况)

你知道有任何java库吗?可能是一个xml / html解析器? (虽然我真的不需要解析器,简单的“干净”程序)

5 个答案:

答案 0 :(得分:6)

JTidy是“HTML语法检查程序和漂亮的打印机。就像它的非Java表兄弟一样,JTidy可以用作清理格式错误和错误的HTML的工具”

但它也可以与xml一起使用。查看文档。它非常聪明,它可能适合你。

答案 1 :(得分:2)

我不知道有任何图书馆可以做到这一点。您的输入是格式错误的XML,没有适当的XML解析器会接受它。更重要的是,并不总是能够区分实际标签与看起来像标签但真实文本的标签。因此,您为解决问题所做的任何基于启发式的尝试都将是脆弱的;即它偶尔会产生格式错误的XML。

最好的方法是在汇编XML之前解决问题。

  • 如果您通过(例如)解析DOM来生成XML,则解析器将为您处理转义。
  • 如果您通过模板化或字符串绑定生成XML,那么在XML标记合并之前,您需要在相关文本块上调用类似StringEscapeUtils.escapeXml的内容。

如果您将问题留在“XML”组装完成之后,则无法正确修复。

答案 2 :(得分:1)

最佳解决方案是修复生成文本输入的程序。最简单的此类修复将涉及一个逃避实用程序,如建议的其他答案。如果那不是一个选项,我会使用像

这样的正则表达式
</?[a-zA-Z]+ */?>

匹配预期的标签,然后将字符串拆分为标签(您想要通过未更改的标签)和标签之间的文本(您要对其应用转义方法。)

我不会指望一个XML解析器能够为你做这件事,因为你所处理的是无效的XML。现有的逃避现象可能会产生歧义,因此您可能也无法做到完美。

答案 3 :(得分:0)

查看番石榴的XmlEscaper。它在版本11的预发行版中,但代码可用。

答案 4 :(得分:-1)

Apache Commons Lang包含一个名为 StringEscapeUtils 的类,它完全符合您的要求!我想你使用的方法是escapeXml