1
我在探索Nokogiri並遇到了令人困惑的問題,我會欣賞某人的意見。注意我對Ruby也是一個相當新的東西,所以我期待着做一些非常愚蠢的事情。如果是這樣的話,道歉。xpath和css查詢之間的不同結果
我有一個簡單的測試,比較XML文檔上的XPath查詢和CSS查詢的結果。 CSS查詢的工作原理,但XPath不,我不知道爲什麼。
should "get same result from Nokogiri using XPath or CSS syntax" do
xml_source = "<?xml version=\"1.0\" encoding=\"utf-8\"?><accounts xmlns=\"http://api.esendex.com/ns/\"><account id=\"2b4a326c-41de-4a57-a577-c7d742dc145c\" uri=\"http://api.esendex.com/v1.0/accounts/2b4a326c-41de-4a57-a577-c7d742dc145c\"><messagesremaining>100</messagesremaining></account></accounts>"
ndoc = Nokogiri::XML(xml_source)
node_value = ndoc.css("accounts account messagesremaining").count
assert_equal 1, node_value
node_value = ndoc.xpath("//accounts//account//messagesremaining").count
assert_equal 1, node_value
end
第二斷言失敗與node_value等於零。
在此先感謝。
感謝Richard,命名空間是關鍵問題。我沒有考慮它,因爲它是默認的。我的錯。 XPath在我添加命名空間引用時起作用,因爲我在使用帶引號的字符串時正在跳過斜槓。儘管一開始就加倍表示根,但我知道它使效率更高。 'node_value = ndoc.xpath('// api:accounts/api:account/api:messagesremaining','api'=>'http://api.esendex.com/ns/').count' – adambird 2011-04-10 09:38:46
「我有它如何在xpath查詢上使用名稱空間的文檔「。 Nokogiri確實有[documententation](http://nokogiri.org/tutorials/searching_a_xml_html_document.html)如何與他們合作。 CSS的好處是它會自動應用'xmlns'命名空間。 – 2011-04-10 21:51:49