2017-06-16 139 views
1

我試圖打印多個元素的名稱,但我只能說服XPath輸出一個。打印多個匹配元素名稱

鑑於這種XML:

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

我試試這個,讓foob

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

我試試這個,並得到有關無效表達了一個錯誤:

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

雖然這正常工作:

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

我在命令行上,嘗試了xmllintxpath(來自Perl的XML-XPath模塊),結果相同。

我怎樣才能得到foobzfoo返回?

回答

2

隨着的XPath 1.0,您的第一個XPath,

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

結果只是"foob"因爲XPath 1.0中僅使第一選定節點集到name()的構件。爲了獲得"foob""zfoo"列表,你將不得不遍歷主辦的XPath調用的語言選擇的節點集 - XSLT,Python和Java等

隨着的XPath 2.0,你的第二個XPath,

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

可以正常工作以直接通過XPath直接獲取"foob""zfoo"的列表。

+0

好吧,我不知道第二個是XPath 2.0;似乎沒有很多支持它的CLI解析器。將不得不用Python或PHP編寫一些東西。謝謝! – miken32