我正在使用SAX Parser来解析XML。在其中一个XML标记中,我有abc&def
之类的数据。在解析XML时,我将&
替换为&
。但是在解析时,&
之前的所有数据都会被截断。 &
之后的所有内容都保留在截断的数据中。因此解析后abc&def
将转换为&def
。有人可以告诉我为什么会发生这种情况???
此外,我们将非常感谢为此提出的建议。
答案 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("|", "&");
}
这样,您将不会丢失任何数据,并且将拥有所需的所有与号。