2012-11-09 47 views
4

可能重複:
Nokogiri/Xpath namespace queryXPath不中引入nokogiri返回任何

假設有XML

<?xml version="1.0" encoding="utf-8"?> 
<SomeResponse xmlns="some_namespace"> 
    <Timestamp>......</Timestamp> 
    <Ack>Failure</Ack> 
    <Errors> 
    <ShortMessage>ShortMessage111.</ShortMessage> 
    <LongMessage>LongMessage111.</LongMessage> 
    <ErrorCode>1</ErrorCode> 
    <SeverityCode>Warning</SeverityCode> 
    </Errors> 
    <Errors> 
    <ShortMessage>ShortMessage222.</ShortMessage> 
    <LongMessage>LongMessage222.</LongMessage> 
    <ErrorCode>2</ErrorCode> 
    <SeverityCode>Warning2</SeverityCode> 
    </Errors> 
    <!-- there might be many Errors nodes --> 
    <Version>123</Version> 
    <Build>122345abt_3423423</Build> 
</SomeResponse> 

我試圖找到所有的錯誤和他們之間長期的使用Nokogiri的短消息。

我做:

doc = Nokogiri.XML(xml) 
errors = doc.xpath("//Errors") 
puts errors 

errors2 = doc.xpath("//Errors//ShortMessage") 
puts errors 

,它說明不了什麼。

我在做什麼錯?

回答

3

您的xml位於名稱空間「some_namespace」中,但您的xpaths沒有名稱空間綁定。你基本上是查詢不同於你的XML中的元素。使用Clark notation您嘗試訪問的元素是{some_namespace} ShortMessage,但是您在no命名空間中查詢ShortMessage。僅僅因爲沒有前綴,即命名空間是默認命名空間,並不意味着你可以忽略它。

+0

我必須使用它?有必要嗎? –

+1

+1學到了一些新東西,雖然我不確定它是如何適用於nokogiri – nurettin

+1

http://stackoverflow.com/questions/4690737/nokogiri-xpath-namespace-查詢可能會有所幫助,我也發現這一點http:///stackoverflow.com/questions/1737572/why-doesnt-nokogiri-xpath-like-xmlns-declarations這實質上是你的問題的重複。 – nine9ths

8

如果你不想處理的命名空間,你可以使用

doc.remove_namespaces! 

這是懶惰的(=高效的),But it is not recommended.

+0

我想讓它輕鬆工作。而已。 –