0

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

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

我正在使用 XMLOutputFactoryImpl 将该 XML 解析为一个字符串,但是,我也需要将单个“大于”(就在另一个文本之前)转义,即使它在那里是合法的。

你有什么想法我需要如何配置我的 OutputFactory 来让它工作吗?

4

3 回答 3

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>
于 2012-12-04T15:49:20.837 回答
1

如果您使用的是 XML api(DOM、StAX 或 JAXB),那么内容将自动为您转义。您也可以为此使用 CDATA 部分。

于 2012-12-04T13:48:52.423 回答
0

您可以使用 apache 公共语言库来转义字符串。

org.apache.commons.lang.StringEscapeUtils

String escapedXml = StringEscapeUtils.escapeXml("the data might contain & or ! or % or ' or # etc");

更新的答案:

最好的解决方案是修复生成文本输入的程序。最简单的此类修复将涉及与建议的其他答案一样的转义实用程序。如果这不是一个选项,我会使用像这样的正则表达式

</?[a-zA-Z]+ */?>

匹配预期的标签,然后将字符串拆分为标签(您希望通过它保持不变)和标签之间的文本(您希望应用转义方法。)

我不会指望 XML 解析器能够为您做这件事,因为您正在处理的不是有效的 XML。现有的缺乏转义可能会产生歧义,因此您可能也无法完成完美的工作。

于 2012-12-04T13:45:04.583 回答