2016-04-22 1 views
1

私は、XPathでの初心者は午前と私はあるアイテムを持っている私のXML項目の値を変更してクローズ(空)たxPath Javaは - 近い

<Info> 
    <Personne> 
     <field name="Name" type="String"> 
      <value type="String"> TOTO </value> 
     </field>> 
     <field name="CountryCode" type="String"> 
      <empty /> 
     </field> 
    </Personne> 
    <Personne> 
     <field name="Name" type="String"> 
      <value type="String"> TOTO </value> 
     </field>> 
     <field name="CountryCode" type="String"> 
      <empty /> 
     </field> 
    </Personne> 

ETC....... 

</Info> 

私は空のアイテムを読み取ることができないよう

expression = "/Personne/field[@name='Name']/* | 
        /Personne/field[@name='CountryCode']/*";  

NodeList nodes = (NodeList) xPath.compile(expression) 
         .evaluate(document, XPathConstants.NODESET);  

for (int i = 0; i < nodes.getLength(); i++){ 
    System.out.print(nodes.item(i).getFirstChild().getNodeValue()); 
} 

は、私は私のテーブル

にちょうど名前の値を見つけると私は与えるだろうに「空」のような値Stringノードの私のテーブルで例えば「ヌル」

  • 私のXMLファイルは非常に大きいです! (1Mライン...)とaproximately 750 000空

  • JDomには非常に時間がかかる...

ありがとう!

+0

この問題のダイナミクスは、代わりにSAXパーサーに対して、「空の」要素を打つときにアクションを取ることを決定することを示します。 DOMを使用するのは面倒かもしれません。 – soufrk

答えて

1

ノードは選択されていますが、getNodeValue()は空の要素に対して""を返します。

System.out.printを使用したため、空の要素の出力は表示されません。

は、単に値が空であるかどうかを確認し、それをnullに変換:

String value = nodes.item(i).getFirstChild().getNodeValue(); 
if ("".equals(value)) 
    value = null; 
System.out.print(value); 
+0

空の値を検出した場合でもnull値を表示する方法はありませんか? – Jason

+0

@Jason確かに、私の編集を参照してください – wero

+0

私は試しましたが、私は例外を投げました:java.lang.NullPointerException – Jason

0

あなたのXMLのサンプルは「PERSONNE」のノードが含まれていますが、あなたのXPath式は「Personnes」が含まれています...スペルミスということでしょうか?ノード名とその値を表示する価値はあります:

System.out.print(nodes.item(i).getFirstChild()。getNodeName()+ ":" + nodes.item() i).getFirstChild()。getNodeValue());

+0

注釈をいただきありがとうございます。 – Jason

0

要素が空の場合は子ノードにアクセスしようとしませんが、テキストコンテンツをたとえば

expression = "/Personne/field[@name='Name']/* | 
        /Personne/field[@name='CountryCode']/*";  

NodeList nodes = (NodeList) xPath.compile(expression) 
         .evaluate(document, XPathConstants.NODESET);  

for (int i = 0; i < nodes.getLength(); i++){ 
    String value = nodes.item(i).getTextContent(); 
    System.out.print(value.equals("") ? "null" : value); 
}