java - SAX XML Java 实体问题

标签 java xml sax

我对 SAXJava 有疑问。

我正在解析 dblp 数字图书馆数据库 xml 文件(其中列举了期刊、 session 、论文)。 XML 文件非常大 (> 700MB)。

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

即:R&uuml;diger Mecke<author>之间的原作者姓名标签

üdiger Mecke是结果

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

我想知道:

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

最佳答案

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/

相关文章:

Android Lint : Unused Resource Warning Not Going Away

Java 8 JSTL 和 saxParseException

Java 的格式说明符重复打印输出

java - 在 Hive 中创建、添加和使用 UDF

Java服务架构

java - 在 Netbeans 平台应用程序中使用 JavaFX

java - 如何让状态栏全白?

c# - 序列化用内部修饰符声明的类的列表<>?

java - 如何计算 XML 文件的深度 - DOM

java - SAX解析器加载DTD文件