2016-04-04 81 views
1

我使用引入nokogiri解析一些XML看起來有點像:使用XPath選擇根和孩子匹配表達式

<item name="item one"> 
    <other name="other name"/> 
    <third /> 
</item> 
<item name="item two"> 
    <other /> 
    <third /> 
</item> 

我解析了使用引入nokogiri像這樣的項目:

xmldoc.xpath("//item").each do |node| 
    node.xpath("//*[@name]") # Gives me *all* elements in the doc 
    node.xpath(".//*[@name]") # Gives me child elements of the item 
end 

在迭代時,我可以使用什麼表達式從第一個節點獲取?

+0

請閱讀 「[MCVE]」。您的XML無效並且您的源代碼無法運行。不要要求我們編寫代碼來測試你的代碼。 –

回答

2

.之初將使特定的上下文中的XPath表達式,用@獲得的屬性,@*獲得所有屬性(通配符):

node.xpath(".//*/@*") 
node.xpath("@*") 

而且,獲取當前節點的所有屬性以及所有子節點的所有屬性:

node.xpath(".//@*") 
+0

是否有一個表達可以同時完成兩條線?我想要根或任何孩子的所有屬性。 – karl

+0

@karl更新,請測試。 – alecxe

+0

我該如何修改它以獲取所有「名稱」屬性(忽略其他屬性)? – karl