2017-06-16 12 views
1

複数の要素の名前を出力しようとしていますが、出力するようにXPathを説得することしかできません。一致する複数の要素名を出力する

このXMLを考える:私はこれを試してみてfoobを取得

<xml> 
    <foob>931</foob> 
    <arba>478</arba> 
    <zfoo>892</zfoo> 
</xml> 

を:

name(//*[contains(name(), "foo")]) 

私はこれを試してみて、無効な式に関するエラーが表示されます。このものの

//*[contains(name(), "foo")]/name() 

正常に動作します:

//*[contains(name(), "foo")]/text() 

私はコマンドラインにあり、同じ結果を持つxmllintxpath(PerlのXML-XPathモジュール)を試してみました。

どうすればfoobzfooが返されますか? name()XPath 1.0の、あなたの最初のXPath、ちょうど"foob"ためのXPath 1.0のパス選択ノードセットの最初のメンバーだけで

name(//*[contains(name(), "foo")]) 

結果と

答えて

2

"foob""zfoo"のリストを取得するには、XPathの呼び出しホスティング言語の選択されたノードセットを反復しなければならない - など、XSLT、PythonやJavaの

のXPath 2.0、あなたの第二のXPath、

付き
//*[contains(name(), "foo")]/name() 

だけのXPath経由で直接"foob""zfoo"のリストを取得するために正常に動作します。

+0

私はXPath 2.0が2番目のものであることは知らなかった。それをサポートするCLIパーサはあまりないようです。 PythonやPHPで何かを書く必要があります。ありがとう! – miken32

関連する問題