在Java中转义有效的XML字符

在Java中转义有效的XML字符,java,xml,xml-parsing,Java,Xml,Xml Parsing,我有一个字符串,看起来像这样: <tag1><tag2>Text</tag2> > AnotherText</tag1> Text>其他文本 我正在使用XMLOutputFactoryImpl将XML解析为一个字符串,但是,我还需要将单个“大于”(就在另一个文本之前)转义,即使在那里合法 您知道我需要如何配置OutputFactory才能使其正常工作吗?您可以使用apache公共语言库来转义字符串 org.apache.commons.l

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

<tag1><tag2>Text</tag2> > AnotherText</tag1>
Text>其他文本
我正在使用XMLOutputFactoryImpl将XML解析为一个字符串,但是,我还需要将单个“大于”(就在另一个文本之前)转义,即使在那里合法


您知道我需要如何配置OutputFactory才能使其正常工作吗?

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

org.apache.commons.lang.StringEscapeUtils

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

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

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

以匹配预期的标记,然后将字符串拆分为标记(您希望不加更改地通过这些标记)和标记之间的文本(您希望对其应用转义方法)


我不指望XML解析器能为您做到这一点,因为您所处理的不是有效的XML。现有的转义缺失可能会产生歧义,因此您可能也无法完成完美的工作。

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

无法重现您的问题。下面是我的代码(我使用rt.jar中的默认StAX):

输出

<tag1><tag2>Text</tag2>&gt; AnotherText</tag1>
文本另一个文本

我不需要对所有字符进行转义,我只需要示例字符串中的最后一个字符。这个角色在那里是合法的,但让它在那里逃逸也是合法的。因为我需要将该字符串与另一个转义为“大于”的字符串进行比较,所以有必要在这里转义为,而不转义其他xml实体。在添加到xml文档之前,您不能转义字符串吗?请详细说明打算做什么。或者,您实际要做的可能是result=myString.replaceAll(“>”,”);我得到一个包含如下元素的字符串:{tag1}{/tag1}(简化标记)。我把它们分解成两个部分。在简化标记之间使用HTML实体(如
)是合法的,这样在将其解析为XML之前,我就不能转义“>”(HTML实体需要保持不变)。我需要做的是转义所有不属于任何标记的单个“>”,因为它们也可能出现在这个字符串中(如第一篇文章中的示例)是“HTML语法检查器和漂亮的打印机。就像它的非Java表亲一样,JTidy可以用作清理格式错误和错误HTML的工具”,但它也可以与xml一起使用。检查文档。这是难以置信的聪明,它可能会为你工作。我正在为您检查答案last>不会被转义(我使用javax.xml.XMLOutputFactory处理字符串)。我如何也转义legal>。“内联>链接”是我将获得的输出,但是,我需要:“内联链接”
<tag1><tag2>Text</tag2>&gt; AnotherText</tag1>