我收到了一些格式错误的xml文本输入,如:
"<Tag>something</Tag> 8 > 3, 2 < 3, ... <Tag>something</Tag>"
我想清理输入以获得:
"<Tag>something</Tag> 8 > 3, 2 < 3, ... <Tag>something</Tag>"
也就是说,逃避像&lt;,&gt;这样的特殊符号。并保留有效标签(“<Tag>something</Tag>
,注意,具有相同的情况)
你知道有任何java库吗?可能是一个xml / html解析器? (虽然我真的不需要解析器,简单的“干净”程序)
答案 0 :(得分:6)
JTidy是“HTML语法检查程序和漂亮的打印机。就像它的非Java表兄弟一样,JTidy可以用作清理格式错误和错误的HTML的工具”
但它也可以与xml一起使用。查看文档。它非常聪明,它可能适合你。
答案 1 :(得分:2)
我不知道有任何图书馆可以做到这一点。您的输入是格式错误的XML,没有适当的XML解析器会接受它。更重要的是,并不总是能够区分实际标签与看起来像标签但真实文本的标签。因此,您为解决问题所做的任何基于启发式的尝试都将是脆弱的;即它偶尔会产生格式错误的XML。
最好的方法是在汇编XML之前解决问题。
StringEscapeUtils.escapeXml
的内容。如果您将问题留在“XML”组装完成之后,则无法正确修复。
答案 2 :(得分:1)
最佳解决方案是修复生成文本输入的程序。最简单的此类修复将涉及一个逃避实用程序,如建议的其他答案。如果那不是一个选项,我会使用像
这样的正则表达式</?[a-zA-Z]+ */?>
匹配预期的标签,然后将字符串拆分为标签(您想要通过未更改的标签)和标签之间的文本(您要对其应用转义方法。)
我不会指望一个XML解析器能够为你做这件事,因为你所处理的是无效的XML。现有的逃避现象可能会产生歧义,因此您可能也无法做到完美。
答案 3 :(得分:0)
查看番石榴的XmlEscaper。它在版本11的预发行版中,但代码可用。
答案 4 :(得分:-1)
Apache Commons Lang包含一个名为 StringEscapeUtils 的类,它完全符合您的要求!我想你使用的方法是escapeXml。