我有一个看起来像这样的字符串:
<tag1><tag2>Text</tag2> > AnotherText</tag1>
我正在使用XMLOutputFactoryImpl将XML解析为String,但是,我需要获得单个&#34;大于&#34; (就在AnotherText之前)也逃脱了,即使将它放在那里也是合法的。
您是否有任何想法我需要如何配置我的OutputFactory才能使其正常工作?
答案 0 :(得分:1)
如果您使用的是XML API(DOM,StAX或JAXB),则会自动为您转义内容。您也可以使用CDATA部分。
答案 1 :(得分:1)
无法重现您的问题。这是我的代码(我使用来自rt.jar的默认StAX):
XMLOutputFactory of = XMLOutputFactory.newInstance();
System.out.println(of.getClass());
XMLStreamWriter ow = of.createXMLStreamWriter(System.out);
ow.writeStartElement("tag1");
ow.writeStartElement("tag2");
ow.writeCharacters("Text");
ow.writeEndElement();
ow.writeCharacters("> AnotherText");
ow.writeEndElement();
ow.close();
输出
<tag1><tag2>Text</tag2>> AnotherText</tag1>
答案 2 :(得分:0)
您可以使用apache common lang library来转义字符串。
org.apache.commons.lang.StringEscapeUtils
String escapedXml = StringEscapeUtils.escapeXml("the data might contain & or ! or % or ' or # etc");
更新回答:
最佳解决方案是修复生成文本输入的程序。最简单的此类修复将涉及一个逃避实用程序,如建议的其他答案。如果那不是一个选项,我会使用像
这样的正则表达式</?[a-zA-Z]+ */?>
匹配预期的标签,然后将字符串拆分为标签(您想要通过未更改的标签)和标签之间的文本(您要对其应用转义方法。)
我不会指望一个XML解析器能够为你做这件事,因为你所处理的是无效的XML。现有的逃避现象可能会产生歧义,因此您可能也无法做到完美。