2011-12-15 24 views
0

私はこの形式のXMLファイルを持っている:XPathで特定のノードの値を取得する方法は?

<object> 
<origin>1:1:1</origin> 
<normal>2:2:2</normal> 
<leafs> 
    <object> 
     <origin>1:1:1</origin> 
     <normal>3:3:3</normal> 
     <leafs>none</leafs> 
    </object> 
</leafs> 
</object> 

は、どのように私は、ツリーの第二レベルの要素<leafs>の「なし」の値を取得することができませんでしたか?私はこれを使用しました

しかし、いくつかの空のテキストノードがありません "なし"のために動作しません。 xpath.compile("*[value()='none']")のように対処する方法はありますか?

+0

*「いくつかの空のノードがあるため動作しません」*はあまり具体的ではありません。空ノードはどこにありますか? –

+0

FYI、あなたのXPath式 '' * [name()= 'leafs'] ''は '' leafs "'と同等です。 – LarsH

+0

「空ノード」という意味ははっきりしません。子を持たない要素ノード?テキスト値のないテキストノード?また、あなたのxpath評価の振る舞いは、あなたが私たちに話してくれなかった 'node'変数の値に依存します。ルートノード(親ノードは '')を保持していますか?または ''要素ノードですか? – LarsH

答えて

3

私はちょうどあなたのXMLファイルを使用して、簡単なテストプログラムを実行し、

expr = xpath.compile("/object/leafs/object/leafs/text()"); 

と所望の「なし」の結果を得ました。追加要件がある場合は、質問を編集する必要があります。 @Lord Torgamusが、私はこのように、必要に応じて、私は文書を解析するために管理し提供されたコードの行をチェックした後

+0

実際には、そのように動作しますが、実際のXMLには数十、おそらく何百という ' ' 。 – MRM

1

XPathExpression expLeafs = xpath.compile("*[name()='leafs']"); 
Object resLeafs = expLeafs.evaluate(node, XPathConstants.NODESET); 
NodeList leafsList = (NodeList) resLeafs; 

Node nd = leafsList.item(0); 

XPathExpression expr = xpath.compile("text()"); 
Object resultObj = expr.evaluate(nd, XPathConstants.NODE); 
String str = expr.evaluate(nd).trim(); 
System.out.println(str); 

、出力はありません、他の空のテキストノードを持つ「none」です。

+0

違いがNODESETではなくXPathConstants.NODEを使用していて、式で選択された最初のtext()ノードを返す必要があるのだろうかと思います。あなたの2つのXPath式は '' * [name()= 'leafs'] [1]/text() ''(これは '' leafs/text() ''と同等でなければなりません。かなり単純化することができます。 – LarsH

+0

@LarsH、NODEを使用したコード行は空文であり、使用されていません。投稿前に削除するのを忘れていました。 * [name()= 'leafs'] [1]/text() ''について、私はそれを試しましたが、 '[1]'を除いてあなたのコメントを読む前に、それは動作しません。また、クラスの最初の3行目が必要です。クラス内で 'leafsList 'の' Node nd'を使用しています。 – MRM

+0

良い点、私は 'resultObj'が使われていないという事実を逃しました。表現に関して、私はなぜそれが "うまくいかなかった"と思っていますが、何が結果を与えられたかについての情報がなければ、私は推測を危険にさらすことはありません。しかし、私は '' leafs ''という名前の(最初の)子要素から生まれたすべてのテキストノードの連結を与える '' string(leafs) ''を試してみます。 – LarsH

関連する問題