0

我想使用 java 从 xml(DOM) 读取多级标签,示例 xml 是:

<根>
     <子类>
         <子类>
             <子类>
                 <name>测试1</name>
                 <地址>地址1</地址>
              </子类>
               <name>测试2</name>
               <地址>地址2</地址>
         </子类>
         <name>test3</name>
         <地址>地址3</地址>
     </子类>
 </root>
如何从上面的xml中读取<name> test2 </name>和<address> address2 </address>?

我已经给出了一个示例代码..但我需要动态查找值。当我使用子类标记迭代 bu 时,它会提供所有数据。只是我想知道如何获取特定数据,例如 <name> test2 </name> 和 <address> address2 </address> 。

下面是我的 java 代码,它正在读取上面的 xml:

NodeList fList = firstWordElement
                        .getElementsByTagName("root");
                for (int i = 0; i < fList.getLength(); i++) {
                    Node firstFLNode = fList.item(i);
                    if (firstFLNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element firstWdElement = (Element) firstFLNode;
                        NodeList firstWdList = firstWdElement.getElementsByTagName("innerclass");

                        for (int j = 0; j < firstWdList.getLength(); j++) {

                            Element firstWd1Element = (Element) firstWdList.item(j);

                            if (firstWd1Element.getNodeType() == Node.ELEMENT_NODE) {
                                String InnerName = ParseUtil.getTagValue("name", firstWd1Element);
                                String InnerFormat = ParseUtil.getTagValue("format", firstWd1Element);
                                String InnerDescription = ParseUtil.getTagValue("description", firstWd1Element);

                                NodeList innerClassList = firstWd1Element.getElementsByTagName("subclass");

                                for (int k = 0; k < innerClassList.getLength(); k++) {

                                    Element subClassElement = (Element) innerClassList
                                            .item(k);
                                    if (subClassElement.getNodeType() == Node.ELEMENT_NODE) {
                                        String InnerSubName = ParseUtil.getTagValue("name", subClassElement);
                                        System.out.println("Innername==="+ InnerSubName);
                                        String InnerSubFormat = ParseUtil.getTagValue("format", subClassElement);
                                        System.out.println("Innerformat==="+ InnerSubFormat);
                                        String InnerSubDescription = ParseUtil.getTagValue("description", subClassElement);
                                        System.out.println("Innerdescription==="+ InnerSubDescription);

                                    }
                                }

                            }



                        }
                    }
                }
4

2 回答 2

1

一种快速的方法是使用 XPath 查询。查看这些教程:

http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

http://www.javabeat.net/2009/03/how-to-query-xml-using-xpath/

于 2012-09-28T13:59:24.073 回答
0

传统上,您必须遍历节点,通常通过从父节点使用 getChildren() 创建 NodeList 来完成。如果您只想要 test2 -node,您必须执行某种比较 - 您不能直接跳转到第二个节点。也就是说你可以,但这不会是一个非常健壮或可扩展的解决方案。

于 2012-09-28T14:00:19.247 回答