使用SAX Parser解析XML时截断的数据和&(&符号)

时间:2014-07-23 13:01:23

标签: xml parsing xml-parsing saxparser

我正在使用SAX Parser来解析XML。在其中一个XML标记中,我有abc&def之类的数据。在解析XML时,我将&替换为&。但是在解析时,&之前的所有数据都会被截断。 &之后的所有内容都保留在截断的数据中。因此解析后abc&def将转换为&def。有人可以告诉我为什么会发生这种情况???

此外,我们将非常感谢为此提出的建议。

2 个答案:

答案 0 :(得分:5)

SAX接口的定义,特别是ContentHandler.characters()方法,说解析器可以随意将数据拆分成块。这是为了提高效率;这意味着在将数据通知给应用程序之前,它不必将数据复制出I / O缓冲区。解析器可以选择拆分数据的位置,但解析器在实体边界拆分文本非常常见。您的应用程序负责重新组装它:通常您的characters()方法应该将数据复制到StringBuilder,然后您应该在到达下一个开始或结束标记时处理汇编的内容。

答案 1 :(得分:0)

也许这为时已晚,但是一种解决方法是用管道符号(或您喜欢的任何其他符号)替换XML文件中的所有“&”符号

然后,当使用SAX Parser解析xml文件时,将以下行添加到characters函数中:

content = content.replace("|", "&");

所以它看起来像这样:

public void characters(char[] ch, int start, int length) throws SAXException {
        content = String.copyValueOf(ch, start, length).trim();
        content = content.replace("|", "&");
}

这样,您将不会丢失任何数据,并且将拥有所需的所有与号。