2014-04-28 84 views
0

我打算從網頁中加載下面提到的xml,然後想從中讀取特定節點。過濾條件:如果「displayname」屬性包含「isc-asr901a」,它應該選擇第一個節點並返回屬性「id」節點ethernetProtocolEndpointExtendedDTO」如何從網頁加載xml文件並從xml讀取特定節點?

<queryResponse type="EthernetProtocolEndpoint"> 
<entity > 
<ethernetProtocolEndpointExtendedDTO id="2283315" displayName="4c2b8aa7[2275273_isc-  asr901a,GigabitEthernet0/0]"> 
<name>GigabitEthernet0/0</name> 
<adminStatus>UP</adminStatus> 
</ethernetProtocolEndpointExtendedDTO> 
</entity> 
<entity > 
<ethernetProtocolEndpointExtendedDTO id="2283315" displayName="4c2b8aa7[2275273_isc-asr901a,GigabitEthernet0/0]"> 
<name>GigabitEthernet0/0</name> 
<adminStatus>UP</adminStatus> 
</ethernetProtocolEndpointExtendedDTO> 
</entity> 
</queryResponse> 

我打算做到這一點使用紅寶石。但我是新來的紅寶石的價值。有人能幫助我完成這一點。通過使用解析器我可以很容易地做到這一點?我用的下面代碼來執行此操作但代碼不返回任何值。

strurl = "https://.." 
doc = Nokogiri::HTML(open(strurl)) 
doc.xpath('//queryResponse/entity/ethernetProtocolEndpointDTO[@displayName="[^"]*isc-asr901a[^"]*]').each do |node|   
puts node['id'] 
end 

謝謝, Chandana

回答

1

您需要使用Nokogiri::XML而不是Nokogiri::HTML,因爲這是一個XML。此外,您在ethernetProtocolEndpointExtendedDTO中發生了錯字 - 您寫下了ethernetProtocolEndpointDTO

此外,你應該使用contains找到包含您的字符串顯示名稱:

strurl = "https://.." 
doc = Nokogiri::XML(open(strurl)) 
doc.xpath('//queryResponse/entity/ethernetProtocolEndpointExtendedDTO[contains(@displayName, "isc-asr901a")]').each do |node|   
    puts node['id'] 
end 
# => 2283315