gpt4 book ai didi

java - 如何拆分XML?一些例子?

转载 作者:行者123 更新时间:2023-12-02 07:50:07 24 4
gpt4 key购买 nike

我有巨大的 XML。我需要解析该文件并获取每个 <elem/>作为单个字符串将它们保存到数据库中,但使用内存占用低的方法,因为文件可能很大(~500MB)。怎么做 ?我正在寻找这样做的可用示例。下面是示例和我不太好的解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<doc>
<header>...<header>
<elem>
<a/><b/><c>...</c>
</elem>
<elem>
<a>...</a><b/><c>...</c>
</elem>
<elem>
<a>...</a>
</elem>
...
</doc>

分割后:

{'<elem/>', '<elem/>', ...}

现在我正在使用如下所示的 SAX DefaultHandler,但我认为这不是一个好的解决方案:

class DataFileParser extends DefaultHandler {

StringBuffer sb;
boolean sElem = false; // is elem

...

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(sElem) {
sb.append("<"+qName+">");
}
if (qName.equalsIgnoreCase("elem")) {
sb = new StringBuffer();
sb.append("<"+qName+">");
sElem = true;
}
...
}

public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("elem")) {
sElem = false;
sb.append("</"+qName+">");
}
...
}

public void characters(char ch[], int start, int length) throws SAXException {
if(sElem) {
sb.append(new String(ch, start, length));
}
}


...
}

最佳答案

使用 SAX 解析器实际上是一个很好的解决方案。您可能需要考虑直接在 endElement 中写入数据库。但是,如果您需要一次编写整个内容(例如在单个 CLOB 中),则无论您使用什么解析器,都必须将其保存在某个地方。您可以为此放入临时文件。

无论如何,SAX 解析器都是最有效的解决方案,因为内存占用主要取决于您处理的数据量而不是解析器实现。

关于java - 如何拆分XML?一些例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327386/

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