在java中读出XML的所有父节点

时间:2015-09-09 08:53:20

标签: java xml dom javax.xml

我有一个XML如下:

<parent>
     <child1>
     </child1>
     <child2>
     </child2>
</parent>
<parent>
     <child3>
     </child3>
     <child4>
     </child4>
</parent>

能够使用以下代码读取第一个父节点的子节点值:

// Get the staff element by tag name directly
            Node PatientVariables = doc.getElementsByTagName("parent").item(0);

            // loop the staff child node
            NodeList patientlist = PatientVariables.getChildNodes();

            for (int i = 0; i < patientlist.getLength(); i++) {
                   Node node = patientlist.item(i);
                 if ("child1".equals(node.getNodeName())) {
                     PatientLastNameValue=node.getTextContent();
                    //System.out.println("The XML value:"+node.getTextContent() );
                   }

但我无法读取第二个父节点值(child3和child4)

3 个答案:

答案 0 :(得分:3)

XML仅允许一个根节点。将您的&#34; parent&#34; -nodes放在根节点下,如下所示:

<root>
    <parent>
    ...
    </parent>
    <parent>
    ...
    </parent>
</root>

然后对root的子节点进行交互。

答案 1 :(得分:1)

以及@Johannes上面的回答,这一行

Node PatientVariables = doc.getElementsByTagName("parent").item(0);

仅返回第一个<parent>...</parent>实例。

您应该将doc.getElementsByTagName("parent")视为一个集合并对其进行迭代。

答案 2 :(得分:1)

您需要浏览xml并将每个父级添加到数组中。

Node [] PatientVariables = add.doc.getElementsByTagName("parent");

您需要遍历父项,并在每个父项的子项之间嵌套循环。

for( int i = 0; i< PatientVariables.length; i++){
  // loop the staff child node
  NodeList patientlist = PatientVariables[i].getChildNodes();

        for (int i = 0; i < patientlist.getLength(); i++) {
               Node node = patientlist.item(i);
        /.../

这是一个基本想法。