我遇到了 SAX 和 Java 的问题。
我正在解析 dblp 数字图书馆数据库xml文件(列举期刊,会议,论文)。 XML文件非常大(> 700MB)。
但是,我的问题是当回调 characters()返回时,如果检索到的字符串包含多个实体,则该方法仅返回从最后一个实体开始的字符串字符找到。
即:Rüdiger Mecke
是<author>
代码
üdiger Mecke
是结果
(从字符返回的字符串(ch [],start,length)方法)。
我想知道:
答案 0 :(得分:4)
characters()
无法保证在一次通话中返回所有字符。来自Javadoc:
Parser将调用此方法来报告每个字符块 数据。 SAX解析器可以在单个中返回所有连续的字符数据 大块,或者他们可能将它分成几个块。
您需要在所有调用中追加返回的字符,例如:
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...
}
答案 1 :(得分:2)
我认为您不能关闭实体解析。
对于单个标记,可以多次调用characters方法,并且您必须在多个调用中收集字符,而不是期望它们全部到达。