在Java中转义有效的XML字符

时间:2012-12-04 13:37:00

标签: java xml xml-parsing

我有一个看起来像这样的字符串:

<tag1><tag2>Text</tag2> > AnotherText</tag1>

我正在使用XMLOutputFactoryImpl将XML解析为String,但是,我需要获得单个&#34;大于&#34; (就在AnotherText之前)也逃脱了,即使将它放在那里也是合法的。

您是否有任何想法我需要如何配置我的OutputFactory才能使其正常工作?

3 个答案:

答案 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>&gt; 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。现有的逃避现象可能会产生歧义,因此您可能也无法做到完美。