gpt4 book ai didi

java - 从 XML 中读取有限数量的元素

转载 作者:行者123 更新时间:2023-12-01 15:29:12 25 4
gpt4 key购买 nike

我有一个很大的 XML 文件(很多 MB),我无法下载整个文件。

<doc>
<element>...</element>
<element>...</element>
...
<element>...</element>
</doc>

我需要从 Web 读取此 XML(或者更好 - 流式传输),然后从其正文中获取前 N 个元素,以便使用 XSLT 模板对其进行处理。

对于这样的任务,您推荐什么库/技术?我正在用 Java 编写。

最诚挚的问候,
问:

最佳答案

您可以使用 STAX 读取元素并将其中的子集重定向到不同的流:

final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
final XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
final XMLEventReader xmlReader = xmlInputFactory.createXMLEventReader(yourInputStream);
final XMLEventWriter xmlWriter = xmlOutputFactory .createXMLEventWriter(yourOutputStream); //The place where the resulting partial XML will go

while (xmlReader.hasNext()) {
XMLEvent event = xmlReader.nextEvent();

if (event ... some validation) {
xmlWriter.add(event); //Forward it to xmlWriter
}

if (we have read enough elements) {
break;
}
}
xmlReader.close();
xmlWriter.flush();
xmlWriter.close();

添加:

要编写结束标记,您应该创建一个结束标记事件,并在需要时将其传递给同一个 XMLEventWriter 对象。为此,您需要一个 XMLEventFactory 实例。以下是编写结束标记的示例:

XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent closeTagEvent = eventFactory.createEndElement("prefix", "http://namespace.com", "elementName");
//This will create a closing tag event for a previously opened <prefix:elementName xmlns:prefix="http://namespace.com">

xmlWriter.add(closeTagEvent);

xmlWriter.flush();
xmlWriter.close();

附注抱歉,我的建议使用 XMLStreamWriter 的评论之一让您感到困惑。我从未使用过 XMLEventWriter 所以直到现在才知道如何正确使用它。

关于java - 从 XML 中读取有限数量的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com