使用 DOM 解析器根据父节点属性检索子节点值

Posted

技术标签:

【中文标题】使用 DOM 解析器根据父节点属性检索子节点值【英文标题】:Retrieving child Node value based on Parent Node attribute using DOM parser 【发布时间】:2021-09-23 13:06:33 【问题描述】:

我的 XML 内容如下

<PARENT1 ATTR="FILE1">
  <TITLE>test1.pdf</TITLE>
</PARENT1>
<PARENT2 ATTR="FILE2">
  <TITLE>test2.pdf</TITLE>
</PARENT2>

我想通过将映射键添加为父属性值并将映射值添加为子节点值来在 Java 中创建一个哈希映射。 示例:

map.put("FILE1","test1.pdf");
map.put("FILE2","test2.pdf");

我知道获取所有子节点列表,但我不知道如何根据父节点属性或父节点获取子节点值。 如何使用 DOM 或 SAX 解析器在 Java 中实现这一点。

非常感谢任何帮助。

问候,

腾杜尔卡

【问题讨论】:

【参考方案1】:

如果 XML 文件不是很大,我建议使用 JDOM 而不是默认的 DOM 解析器,因为它对用户更加友好。

这里有一个例子可以做你想做的事,但你需要自己做错误检查等等。

 public class XmlParser 
     private static final String xml = "<parents><parent name=\"name1\"><title>title1</title></parent><parent name=\"name2\"><title>title2</title></parent></parents>";

     public static final void main(String [] args) throws ParserConfigurationException, SAXException, IOException 
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(xml)));
        Node parents = doc.getChildNodes().item(0);
        Map<String, String> dataMap = new HashMap<>();
    
        for (int i = 0; i < parents.getChildNodes().getLength(); i++) 
            Node parent = parents.getChildNodes().item(i);
            String name = parent.getAttributes().getNamedItem("name").getNodeValue();           
            String title = parent.getChildNodes().item(0).getTextContent();
            dataMap.put(name, title);
        

        System.out.println(dataMap);
    

【讨论】:

以上是关于使用 DOM 解析器根据父节点属性检索子节点值的主要内容,如果未能解决你的问题,请参考以下文章

在Javascript中使用DOM解析器获取子节点属性值

高手帮忙:sql 里怎样递归判断父节点和子节

DOM节点

Java:简单的解析XML文件之使用DOM解析

JavaScript DOM

DOM