2011-11-14 16 views
1

XPathを使用して空でないすべてのノードをXMLファイルから取得する方法はありますか? XMLは次のようになります。各タグの後java xpath解析

<workspace> 
<light> 
    <activeFlag>true</activeFlag> 
    <ambientLight>0.0:0.0:0.0:0.0</ambientLight> 
    <diffuseLight>1.0:1.0;1.0:1.0</diffuseLight> 
    <specularLight>2.0:2.0:2.0:2.0</specularLight> 
    <position>0.1:0.1:0.1:0.1</position> 
    <spotDirection>0.2:0.2:0.2:0.2</spotDirection> 
    <spotExponent>1.0</spotExponent> 
    <spotCutoff>2.0</spotCutoff> 
    <constantAttenuation>3.0</constantAttenuation> 
    <linearAtenuation>4.0</linearAtenuation> 
    <quadricAttenuation>5.0</quadricAttenuation> 
</light> 

<camera> 
    <activeFlag>true</activeFlag> 
    <position>2:2:2</position> 
    <normal>1:1:1</normal> 
    <direction>0:0:0</direction> 
</camera> 

<object> 
    <material>lemn</material> 
    <Lu>1</Lu> 
    <Lv>2</Lv> 
    <unit>metric</unit> 
    <tip>tip</tip> 
    <origin>1:1:1</origin> 
    <normal>2:2:2</normal> 
    <parent> 
     <object>null</object> 
    </parent> 
    <leafs> 
     <object>null</object> 
    </leafs> 
</object> 

パーサ私は必要としない別の空のノードを「見ます」。

//*[string-length(normalize-space(text())) > 0] 
+0

したがって、これはを選択していないでしょうか? –

+0

それは「見る」ことはありません。それは本当にあります。これはテキストノードであり、ドキュメントの場合はほとんどの行にキャリッジリターンとそれに続く4つのスペースが含まれています。 – dty

+0

すべての2つのタグの間。新しい行ごとに空のノードがあります。 – MRM

答えて

2

は、私が何をしたいことは、単に空白で構成されていない即時テキストノードの子を持つすべての要素ノードであると思います。そうでない場合は、使用しているテクノロジ(使用していないこと)に依存します。などDOM、JDOM、

+0

本当にありがとう! – MRM

0

あなたはXSLTを使用している場合は、<xsl:strip-space elements="*"/>を使用します。

0

あなたはをしたい:

//*[normalize-space()] 

表現

//*[string-length(normalize-space(text())) > 0] 

は間違った答えです。最初のテキストノードの子テキストが空白だけではない文書内のすべての要素を選択します。

<p><b>Hello </b><i>World!</i></p> 

この段落は、テキストのかなり多くを含んでいるものの、...提供XMLに空のノードです