我对简单的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个子节点?
非常感谢任何帮助。
答案 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”来解决我的问题。