我正在使用Document对象从xml中提取所有标记.如果xml有一个空标记,我会得到一个空指针异常.我该如何防范这个?如何检查空标签?
<USTrade>
<CreditorId>
<CustomerNumber>xxxx</CustomerNumber>
<Name></Name>
<Industry code="FY" description="Factor"/>
</CreditorId>
<DateReported format="MM/CCYY">02/2012</DateReported>
<AccountNumber>54000</AccountNumber>
<HighCreditAmount>0000299</HighCreditAmount>
<BalanceAmount>0000069</BalanceAmount>
<PastDueAmount>0000069</PastDueAmount>
<PortfolioType code="O" description="Open Account (30, 60, or 90 day account)"/>
<Status code="5" description="120 Dys or More PDue"/>
<Narratives>
<Narrative code="GS" description="Medical"/>
<Narrative code="CZ" description="Collection Account"/>
</Narratives>
</USTrade>
<USTrade>
所以,当我使用时:
NodeList nm = docElement.getElementsByTagName("Name");
if (nm.getLength() > 0)
name = nullIfBlank(((Element) nm.item(0))
.getFirstChild().getTextContent());
Nodelist给出的长度为1,因为有一个标签,但是当我执行getTextContent()时,它会命中空指针,因为FirstChild()没有为tag = Name返回任何内容
而且,我已经为每个xml标签做了这个.在每次标记提取之前,我都可以进行简单的检查吗?
解决方法:
我要做的第一件事就是取消你的电话.这将使您有机会确切地确定哪个引用为null以及您需要对以下内容进行空检查的引用:
NodeList nm = docElement.getElementsByTagName("Name");
if (nm.getLength() > 0) {
Node n = nm.item(0);
Node child = n.getFirstChild();
if(child == null) {
// null handling
name = null;
}
else {
name = nullIfBlank(child.getTextContent());
}
}
另外,查看Node上的hasChildNodes()方法! http://docs.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/Node.html#hasChildNodes%28%29