条件Java解析 - 获取子节点内容

时间:2016-11-10 16:54:59

标签: java dom

我对简单的DOM解析有一些问题。我检查了很多问题,到目前为止没有任何问题有助于我的情况。问题是我有一些条件节点可能出现在XML中或可能不出现。我创建的工具必须将这些值的内容保存到ArrayLists中以便稍后使用。这是有问题的XML:

-<Dbtr>

   -<PstlAdr>

      <AdrLine>111 Arlington Ave</AdrLine>

      <AdrLine>Apartment A</AdrLine>

      <AdrLine>Augusta, AZ 11100</AdrLine>

   </PstlAdr>

</Dbtr>

具体而言,Dbtr标记可能在XML中出现任意次。对于每个Dbtr标签,可能有1-4个AdrLine儿童。我需要能够保存每个AdrLine的值,如果没有值,则保存一个空白&#34;&#34;值到每个数组列表中。

为此,我编写了以下代码:

NodeList Dbtr = doc.getElementsByTagName("Dbtr");
        for(int i = 0; i < Dbtr.getLength(); i++){

            NodeList DbtrChildren = Dbtr.item(i).getChildNodes();
            if(DbtrChildren.getLength()==1){
            //Add the first child.  
            }else if(DbtrChildren.getLength()==2){
            //Add the first & second child.
            }else if(DbtrChildren.getLength()==3){
            System.out.println("Test Flag");
            System.out.println(DbtrChildren.item(0).getNodeValue()+"Node Value");
            System.out.println(DbtrChildren.item(0).getAttributes()+"Text Attributes");
            System.out.println(DbtrChildren.item(0).getTextContent()+"Text Content");
            }else if(DbtrChildren.getLength()==4){
            //Add all 4 children.   
            }

        }

因此,根据子节点AdrLine节点的数量,值将保存到数组列表中,否则将保存空值。

问题在于,无论我做什么,我都会为孩子们提供空白值。我可以在测试中清楚地看到Dbtr标签确实有3个孩子。正如您所看到的,我尝试进行一些调试以找出获取值的方法。见下面的结果:

Test Flag

                                Node Value
nullText Attributes

                                Text Content

所以我得到了大量的空白但没有价值。当然,我认为也许它实际上正在接受&#34; PstlAdr&#34;但那为什么它会成功检测到3个子节点?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。

在上面的例子中,我回到DbtrChildren的长度“3”,这让我相信三个子元素是adrline标签。

实际上,三个孩子是#text,pstladr和#text(#text显然代表/ n)。

所以我试图从没有值的标签中获取值。一旦我尝试了

for(int i = 0; i < Dbtr.getLength(); i++){

                NodeList Dbtr2 = Dbtr.item(i).getChildNodes();

                Node Dbtr3 = Dbtr2.item(1);

                System.out.println(Dbtr3.getNodeName());


                }

我回来了“Pstladr”,所以现在我知道我只需要更进一步“Pstladr”来解决我的问题。