如何使用java在xml中获取子对象的所有根
我有一个如下所示的xml文件如何使用java在xml中获取子对象的所有根,java,Java,我有一个如下所示的xml文件 <root> <subchildA> <childA> <dataA>data</dataA> <dataB>data</dataB> </childA> </subchildA> <subchildB> <childB> <dataA>da
<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());
}
}
}
}
}
}