gpt4 book ai didi

java - stax - 获取 xml 节点作为字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:10 26 4
gpt4 key购买 nike

xml 看起来像这样:

<statements>
<statement account="123">
...stuff...
</statement>
<statement account="456">
...stuff...
</statement>
</statements>

我正在使用 stax 一次处理一个“<statement> ”,我开始工作了。我需要将整个语句节点作为一个字符串,以便我可以创建“123.xml”和“456.xml”,或者甚至可以将其加载到按帐户索引的数据库表中。

使用这种方法:http://www.devx.com/Java/Article/30298/1954

我想做这样的事情:

String statementXml = staxXmlReader.getNodeByName("statement");

//load statementXml into database

最佳答案

我有一个类似的任务,虽然最初的问题已经超过一年了,但我找不到满意的答案。到目前为止最有趣的答案是 Blaise Doughan 的答案,但我无法让它在我期望的 XML 上运行(也许底层解析器的某些参数可以改变它?)。这里的 XML,非常简单:

<many-many-tags>
<description>
...
<p>Lorem ipsum...</p>
Devils inside...
...
</description>
</many-many-tags>

我的解决方案:

public static String readElementBody(XMLEventReader eventReader)
throws XMLStreamException {
StringWriter buf = new StringWriter(1024);

int depth = 0;
while (eventReader.hasNext()) {
// peek event
XMLEvent xmlEvent = eventReader.peek();

if (xmlEvent.isStartElement()) {
++depth;
}
else if (xmlEvent.isEndElement()) {
--depth;

// reached END_ELEMENT tag?
// break loop, leave event in stream
if (depth < 0)
break;
}

// consume event
xmlEvent = eventReader.nextEvent();

// print out event
xmlEvent.writeAsEncodedUnicode(buf);
}

return buf.getBuffer().toString();
}

使用示例:

XMLEventReader eventReader = ...;
while (eventReader.hasNext()) {
XMLEvent xmlEvent = eventReader.nextEvent();
if (xmlEvent.isStartElement()) {
StartElement elem = xmlEvent.asStartElement();
String name = elem.getName().getLocalPart();

if ("DESCRIPTION".equals(name)) {
String xmlFragment = readElementBody(eventReader);
// do something with it...
System.out.println("'" + fragment + "'");
}
}
else if (xmlEvent.isEndElement()) {
// ...
}
}

请注意,提取的 XML 片段将包含完整的提取正文内容,包括空格和注释。为了代码简洁,按需过滤那些,或使缓冲区大小参数化已被省略:

'
<description>
...
<p>Lorem ipsum...</p>
Devils inside...
...
</description>
'

关于java - stax - 获取 xml 节点作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351826/

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