0

我有如下所示的 XML:

<StartTag>
    <MyValueTag>And the value itself contains a < bracket that makes the XML invalid</MyValueTag>
</StartTag>

XML 包含使 XML 无效的“<”字符。

现在最简单的方法是修复 XML 的源,但不幸的是我无法控制 XML 的创建。它有类似“The value is < than 10”的消息,假设是“小于”。

无论如何,我如何检查 XML 中的此类内容并转义这些字符?

我试着看这篇文章,那个人指出我们应该使用 JTidy。但是当我尝试它时,它并没有删除 <:

Tidy tidy = new Tidy();
tidy.setInputEncoding("UTF-8");
tidy.setOutputEncoding("UTF-8");
tidy.setWraplen(Integer.MAX_VALUE);
tidy.setPrintBodyOnly(true);
tidy.setXmlOut(true);
tidy.setSmartIndent(true);
ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8"));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
tidy.parseDOM(inputStream, outputStream);
4

1 回答 1

3

XML 无效的事实意味着您将无法使用有效的 XML 解析器来读取和修复它。如果您无法找到编写文件以修复错误的软件的作者,那么您将不得不提出一些特定于应用程序的解决方案。

例如,如果你知道流浪 < char 只出现在一个<MyValue>元素的文本中,并且如果你知道没有其他元素可以作为 的子元素出现<MyValue>,那么编写一个识别开始和结束的程序将非常容易标签,并将它们之间出现的任何 < 字符替换为&#60;

当然,如果问题没有那么简单,那么解决方案也不会那么简单;但希望您可以使它比解决 XML 的一般问题更简单。

在你“手动”修复了几个文件之后,停下来问问自己,“我怎么知道 < char 需要被转义?” 然后编写一个基于相同知识运行的程序。

于 2014-09-09T17:33:09.523 回答