如何使用java从xml(DOM)的多级标记中读取特定元素

如何使用java从xml(DOM)的多级标记中读取特定元素,java,xml,dom,xml-parsing,Java,Xml,Dom,Xml Parsing,我想使用java从xml(DOM)读取多级标记,示例xml为: <root> <subclass> <subclass> <subclass> <name>test1</name> <address>address1</address> </sub

我想使用java从xml(DOM)读取多级标记,示例xml为: <root> <subclass> <subclass> <subclass> <name>test1</name> <address>address1</address> </subclass> <name>test2</name> <address>address2</address> </subclass> <name>test3</name> <address>address3</address> </subclass> </root> 测试1 地址1 测试2 地址2 测试3 地址3 如何从上述xml中读取test2和address2

我已经给出了一个示例代码。。但我需要动态地找到这些值。 当我使用子类标记迭代bu时,它给出了所有数据。我只是想知道如何获取特定的数据,比如test2address2

下面是我读取上述xml的java代码:

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);

                                    }
                                }

                            }



                        }
                    }
                }
NodeList fList=firstWordElement
.getElementsByTagName(“根”);
对于(int i=0;i
实现这一点的快速方法是使用XPath查询。查看以下教程:


传统上,您必须通过节点进行迭代,通常通过使用父节点的getChildren()创建节点列表来完成。如果您只需要test2节点,那么必须执行某种比较,不能直接跳到第二个节点。也就是说,您可以,但这并不是一个非常健壮或可扩展的解决方案