4

Document オブジェクトを使用して、xml からすべてのタグを抽出しています。xml に空のタグがある場合、null ポインター例外が発生します。これを防ぐにはどうすればよいですか?空のタグを確認するにはどうすればよいですか?

<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 に対して何も返さないため、null ポインターにヒットします。

そして、xml タグごとにこれを行いました。すべてのタグ抽出の前にできる簡単なチェックはありますか?

4

3 に答える 3

7

私が最初にすることは、あなたの通話のチェーンを解除することです。これにより、どの参照が null で、どの参照に対して 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());
                    }

                 }

hasChildNodes()また、 Nodeのメソッドをチェックしてください!http://docs.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/Node.html#hasChildNodes%28%29

于 2012-05-02T13:54:16.167 に答える
0
while(current != null){
                if(current.getNodeType() == Node.ELEMENT_NODE){
                    String nodeName = current.getNodeName();
                    System.out.println("\tNode: "+nodeName);
                    NamedNodeMap attributes = current.getAttributes();
                    System.out.println("\t\tNumber of Attributes: "+attributes.getLength());
                    for(int i=0; i<attributes.getLength(); i++){
                        Node attr = attributes.item(i);
                        String attName = attr.getNodeName();
                        String attValue= attr.getNodeValue();
                        System.out.println("\t\tAttribute Name: "+ attName+ "\tAttribute Value:"+ attValue);
                    }
                }

ノードの値も出力したいですか? もしそうなら、それはあなたが追加しなければならない私の例の1行のコードであり、私もそれを共有することができます.

于 2012-05-02T13:48:29.153 に答える
0

そのようなことを試しましたか?

NodeList nm = docElement.getElementsByTagName("Name");
if ((Element) nm.item(0))
 name = nullIfBlank(((Element) nm.item(0)).getFirstChild().getTextContent());
于 2012-05-02T13:54:46.067 に答える