如何使用java在xml中获取子对象的所有根

如何使用java在xml中获取子对象的所有根,java,Java,我有一个如下所示的xml文件 <root> <subchildA> <childA> <dataA>data</dataA> <dataB>data</dataB> </childA> </subchildA> <subchildB> <childB> <dataA>da

我有一个如下所示的xml文件

<root>
 <subchildA>
    <childA>
         <dataA>data</dataA>
         <dataB>data</dataB>
    </childA>
 </subchildA>
 <subchildB>
    <childB>
         <dataA>data</dataA>
         <dataB>data</dataB>
    </childB>
 </subchildB>
</root>

您可以使用JAXB(用于xml绑定的Java体系结构)将xml文档编组和反编组为Java bean。

您可以使用getParentNode查找和特定节点的父节点。

您必须向后遍历xml才能到达根节点


使用
Node Node.getParentNode()
方法,您可以获取当前节点的父节点,并在父节点上应用相同的方法,直到到达所需的节点(父节点)。

子节点
子节点
不会成为问题,以下示例适用于:

 <root>
     <xyz>
        <childxyz>
             <dataxyz>
             .......
             .......
     .......
     .......
     <pqr>
        <childpqr>
             <datapqr>
             .......
             .......

.......
.......
.......
.......
.......
.......
等等

试着这样做:

Element root = doc.getDocumentElement();
NodeList noteListRoot = root.getChildNodes();
for (int i = 0; i < noteListRoot.getLength(); i++) {
    Node subChild = noteListRoot.item(i);
    if (subChild.getNodeType() == Node.ELEMENT_NODE) {
        NodeList subChildNList = subChild.getChildNodes();
        for (int j = 0; j < subChildNList.getLength(); j++) {
            Node childNode = subChildNList.item(j);
            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                NodeList childNodeList = childNode.getChildNodes();
                for(int k=0; k<childNodeList.getLength(); k++){
                    Node dataNode = childNodeList.item(k);
                    if (dataNode.getNodeType() == Node.ELEMENT_NODE) {
                        System.out.println(dataNode.getNodeName() +" ->  "+dataNode.getTextContent());
                    }
                }
            }
        }
    }
}
Element root=doc.getDocumentElement();
NodeList noteListRoot=root.getChildNodes();
对于(int i=0;i对于(int k=0;kAll?只能有一个根。你能发布你的尝试(代码)吗?希望你能找到你的@Suzon解决方案很好,但没有固定的子项,但在我的情况下,我不知道会有多少个内部子项。例如childA可以包含另一个内部子项。谢谢你的指导。Node.getParentNode()正在将我带到subchildA,但我希望subchildA childA用于数据这是getParentNode()的工作方式。
node(childA)=node(dataA)。getParentNode();node(subchildA)=node(childA)。getParentNode();
为了更好地理解,我将节点名称放在括号中。使用反向遍历上述代码帮助我获得了结果,谢谢Bwithlove先生。只有在根目录中只有4个级别时,如果上面的代码中有n个级别失败,那么它才会起作用
Element root = doc.getDocumentElement();
NodeList noteListRoot = root.getChildNodes();
for (int i = 0; i < noteListRoot.getLength(); i++) {
    Node subChild = noteListRoot.item(i);
    if (subChild.getNodeType() == Node.ELEMENT_NODE) {
        NodeList subChildNList = subChild.getChildNodes();
        for (int j = 0; j < subChildNList.getLength(); j++) {
            Node childNode = subChildNList.item(j);
            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                NodeList childNodeList = childNode.getChildNodes();
                for(int k=0; k<childNodeList.getLength(); k++){
                    Node dataNode = childNodeList.item(k);
                    if (dataNode.getNodeType() == Node.ELEMENT_NODE) {
                        System.out.println(dataNode.getNodeName() +" ->  "+dataNode.getTextContent());
                    }
                }
            }
        }
    }
}