当前位置: 首页 > 面试题库 >

使用stax和dom读取大XML文件

张鸿宝
2023-03-14
问题内容

我需要阅读几个大(200Mb-500Mb)XML文件,所以我想使用StaX。我的系统有两个模块-
一个用于读取文件(使用StaX);另一个用于读取文件。另一个模块(“解析器”模块)假定获取该XML的单个条目并使用DOM对其进行解析。我的XML文件没有特定的结构-因此我无法使用JaxB。如何向“解析器”模块传递要解析的特定条目?例如:

<Items>
   <Item>
        <name> .... </name>
        <price> ... </price>
   </Item>
   <Item>
        <name> .... </name>
        <price> ... </price>
   </Item>
</Items>

我想使用StaX来解析该文件-但是每个“项目”条目都将传递到“解析器”模块。

编辑:
多一点阅读之后-我想我需要一个使用流读取XML文件的库-但使用DOM解析每个条目。有这样的事吗?


问题答案:

您可以使用StAX(javax.xml.stream)解析器并将javax.xml.transform每个部分转换()到DOM节点(org.w3c.dom):

import java.io.*;
import javax.xml.stream.*;
import javax.xml.transform.*;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.dom.DOMResult;
import org.w3c.dom.*

public class Demo {

    public static void main(String[] args) throws Exception  {
        XMLInputFactory xif = XMLInputFactory.newInstance();
        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("input.xml"));
        xsr.nextTag(); // Advance to statements element

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
            DOMResult result = new DOMResult();
            t.transform(new StAXSource(xsr), result);
            Node domNode = result.getNode();
        }
    }

}

另请参阅:

  • 使用Java分割1GB Xml文件


 类似资料:
  • 问题内容: 输入文件包含数千个XML格式的事务,大小约为10GB。要求是根据用户输入选择每个事务XML,并将其发送到处理系统。 文件的样本内容 希望(技术)用户提供输入标签名称,例如。 我们希望提供更通用的解决方案。文件内容可能会有所不同,用户可以使用XPath表达式(例如“ ”)来选择单个事务。 这里我们需要考虑的技术问题很少 该文件可以位于共享位置或FTP 由于文件很大,因此我们无法在JVM中

  • 问题内容: 我第一次使用stax解析XML字符串。我找到了一些示例,但无法使我的代码正常工作。这是我的代码的最新版本: 我将手表放在“事件”和“ reader.getElementText()”上。当代码停止时 将显示“ reader.getElementText()”值,但是一旦它偏离该行,就无法评估。当代码停止时: “元素”手表显示正确的值。最后,当我又将代码步进一行时,我捕获了此异常: 我尝

  • 我可以刷新编写器并再次使用相同的编写器向文件中追加更多的xml,如下所示:

  • 导语 XML(ExtensibleMarkup Language,可扩展标记语言),是一种类似于HTML的标记语言,但它的设计目的是用来传输数据,而不是显示数据。XML的标签没有被预定义,用户需要在使用时自行进行定义。XML是W3C(万维网联盟)的推荐标准。相对于数据库表格的二维表示,XML使用的树形结构更能表现出数据的包含关系,作为一种文本文件格式,XML简单明了的特性使得它在信息存储和描述领域

  • 如何在java StaX解析器中读取此xml。这是示例 xml。原始文件大小大于 2 GB。所以只有我去StaX解析器。我的Java类是BulkFileReader.java 我使用此java代码从xml标记中检索值。当我使用这个代码时。我可以检索第三个

  • 我试图理解STAX java的机制是如何工作的。 我有这个xml文件 为了模仿这个XML文件的行为,我们创建了一个具有相似属性的对象 有了这个,我尝试读取我的xml文件: 我的问题是,它们是5个产品,但当我试图输出它们时,它们不是正确的数字。1.If in:If(startElement.getName().getLocalPart()。equals(“orders”))最后一个参数是“oders