2016-11-10 62 views
0

我遇到了一些什么问题应该是简单的DOM解析。我检查了很多问题,至今没有任何事情帮助我的情况。问题是我有一些可能出现在XML中的条件节点,或者可能不会出现。我创建的工具必须将这些值的内容保存到ArrayList中以供以后使用。这里是有问题的XML:有条件的Java解析 - 获取子节点内容

-<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的值,如果没有值,则为每个值保存一个空白的“”值到数组列表中。

要做到这一点,我写了下面的代码:

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 

所以我得到了大量的空白,但没有价值。当然,我认为它可能实际上是在拾取“PstlAdr”,但为什么它会成功检测到3个子节点?

任何帮助非常感谢。

回答

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”来解决我的问题。