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