我对 SAX 和 Java 有疑问。
我正在解析 dblp 数字图书馆数据库 xml 文件(其中列举了期刊、 session 、论文)。 XML 文件非常大 (> 700MB)。
但是,我的问题是,当回调 characters() 返回时,如果检索到的字符串包含多个 entities,则该方法只返回从最后一个实体开始的字符串找到字符。
即:Rüdiger Mecke
是<author>
之间的原作者姓名标签
üdiger Mecke
是结果
(从 characters (ch[], start, length) 方法返回的字符串)。
我想知道:
- 如何防止 PArser 自动解析实体?
- 如何解决前面描述的截断字符问题?
最佳答案
characters()
不保证在一次调用中返回所有字符。来自 Javadoc:
The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks.
您需要附加所有调用中返回的字符,例如:
private StringBuffer tempValue = new StringBuffer();
startElement()
{
tempValue.setLength(0); // clear buffer...
}
characters(characters(char[] ch, int start, int length)
{
tempValue.append(ch, start, length); // append to buffer
}
endElement()
{
String value = tempValue.toString(); // use characters in buffer...
}
关于java - SAX XML Java 实体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556086/