SAXXMLJava实体问题
我对SAX和Java有问题 我正在解析dblp数字图书馆数据库xml文件(其中列举了期刊、会议、论文)。XML文件非常大(>700MB) 但是,我的问题是,当回调characters()返回时,如果检索到的字符串包含多个实体,则该方法只返回从找到的最后一个实体字符开始的字符串 i、 e.:SAXXMLJava实体问题,java,xml,sax,Java,Xml,Sax,我对SAX和Java有问题 我正在解析dblp数字图书馆数据库xml文件(其中列举了期刊、会议、论文)。XML文件非常大(>700MB) 但是,我的问题是,当回调characters()返回时,如果检索到的字符串包含多个实体,则该方法只返回从找到的最后一个实体字符开始的字符串 i、 e.:Rü;diger Mecke是在标记之间保留的原始作者姓名 u diger Mecke就是结果 (从characters(ch[],start,length)方法返回的字符串) 我想知道: 如何防止解析
Rü;diger Mecke
是在
标记之间保留的原始作者姓名
u diger Mecke
就是结果
(从characters(ch[],start,length)方法返回的字符串)
我想知道:
characters()
不能保证在一次调用中返回所有字符。从Javadoc:
解析器将调用此方法来报告每个字符块
数据。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...
}
好的,但为什么characters方法只对包含实体的文本节点调用多次?我不相信这是唯一会导致多次调用的方法,但我知道它在大多数sax实现中都会发生。长块也可能被分割。什么决定解析器返回的块?我的文件包含一个“,”这似乎是对解析的限制。