SAX XML Java实体问题

时间:2010-12-29 17:03:59

标签: java xml sax

我遇到了 SAX Java 的问题。

我正在解析 dblp 数字图书馆数据库xml文件(列举期刊,会议,论文)。 XML文件非常大(> 700MB)。

但是,我的问题是当回调 characters()返回时,如果检索到的字符串包含多个实体,则该方法仅返回从最后一个实体开始的字符串字符找到

即:R&uuml;diger Mecke<author>代码

之间的原始作者姓名

üdiger Mecke是结果

(从字符返回的字符串(ch [],start,length)方法)。

我想知道:

  1. 如何防止PArser自动解析实体?
  2. 如何解决之前描述的截断字符问题?

2 个答案:

答案 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)

  1. 我认为您不能关闭实体解析。

  2. 对于单个标记,可以多次调用characters方法,并且您必须在多个调用中收集字符,而不是期望它们全部到达。