gpt4 book ai didi

java - 遍历 DOM 树以获取(名称,值)对属性和叶节点

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:28 25 4
gpt4 key购买 nike

我想遍历 DOM 中的 XML 文件,以检索所有(名称,值)对:

  1. 属性名称和值;
  2. 所有叶节点名称及其文本内容;

以下面的 XML 文件为例:

<?xml version="1.0" encoding="UTF-8"?>
<title text="title1">
<comment id="comment1">
<data> abcd </data>
<data> efgh </data>
</comment>
<comment id="comment2">
<data> ijkl </data>
<data> mnop </data>
<data> qrst </data>
</comment>
</title>

我想要的名称值对是:

text=title1
id=comment1
data=abcd
data=efgh
id=commment2
data=ijkl
data=mnop
data=qrst

最佳答案

一个更简单的解决方案可能是使用 XPath 提取所有名称值对,如下例所示。您也可以跳过 DOM 构造并直接在 InputSource 上调用 evaluate。 XPath 表达式

//@* | //*[not(*)]

匹配所有属性和没有任何子节点的所有节点的并集。

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class Test {

private static final String xml = "<title text='title1'>\n"
+ " <comment id='comment1'>\n"
+ " <data> abcd </data>\n"
+ " <data> efgh </data>\n"
+ " </comment>\n"
+ " <comment id='comment2'>\n"
+ " <data> ijkl </data>\n"
+ " <data> mnop </data>\n"
+ " <data> qrst </data>\n"
+ " </comment>\n"
+ "</title>\n";

public static void main(String[] args) throws Exception {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));

XPathFactory xpf = XPathFactory.newInstance();
XPath xp = xpf.newXPath();
NodeList nodes = (NodeList)xp.evaluate("//@* | //*[not(*)]", doc, XPathConstants.NODESET);

System.out.println(nodes.getLength());

for (int i=0, len=nodes.getLength(); i<len; i++) {
Node item = nodes.item(i);
System.out.println(item.getNodeName() + " : " + item.getTextContent());
}
}
}

关于java - 遍历 DOM 树以获取(名称,值)对属性和叶节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199897/

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