2017-04-21 68 views
0

如果XPath查詢導致列出不同名稱的屬性,那麼您是否可以追加到該查詢中以僅選擇值並省略屬性名稱等? (對於便攜性,我的目標的XPath 1.0)如何從不同名稱的屬性列表中選擇值?

的人示例XML與地址:

<people> 
    <person workaddr="foo" homeaddr="bar"/> 
    <person workaddr="baz" homeaddr="foo"/> 
    <person workaddr="qux" homeaddr="zoo"/> 
</people> 

我尋找任何方式與地址foo有關的任何人的所有地址XPath查詢:

//person[@*='foo']/@*['addr' = substring(name(.), string-length(name(.)) - string-length('addr') +1) and . != ''] 

(我知道這將任何人任何屬性,它的值是foo,不只是foo地址01匹配,因爲在實際情況下除工作和家庭地址之外還有其他屬性。如果你碰巧知道如何改進我的查詢來限制的屬性值檢查,後綴名爲addr屬性,這將是一個巨大的獎金)

我查詢的結果至少根據http://www.freeformatter.com/xpath-tester.html#ad-output是:

Attribute='homeaddr=bar' 
Attribute='workaddr=foo' 
Attribute='homeaddr=foo' 
Attribute='workaddr=baz' 

我想只是值:bar foo foo baz甚至bar foo baz

提前感謝!

+0

嘗試添加'字符串()'得到公正價值觀:'//人[@ * = '富']/@ * [ 'addr'= substring(name(。),string-length(name(。)) - string-length('addr')+1)和。 !='']/string()' – Andersson

+0

'string()'是一個函數,而不是節點測試。因此,在路徑步驟中調用'string()'在XPath 1.0中不起作用 – har07

回答

1

這就是輸出中特定XPath測試人員持續屬性的方式。您可以輕鬆切換到不同的工具,以便更好地滿足您的需求,例如,http://www.xpathtester.com/xpath不會在輸出中打印屬性名稱,您可以看到in this demo。此外,XPath處理器庫(如果使用的話)總是提供一種方法來讀取API中屬性的值。

現在關於另一個問題,您似乎已經將結果限制爲以'addr'結尾的屬性,因此只需在前一個路徑步驟中實現相同的謂詞,以將對'foo'的檢查限制爲屬性的名稱以 '地址' 結尾:

//person[@*[ 
    'addr' = substring(name(.), string-length(name(.)) - string-length('addr') +1) 
    and .='foo' 
]] 
/@*[ 
    'addr' = substring(name(.), string-length(name(.)) - string-length('addr') +1) 
    and . != '' 
] 

demo

相關問題