我正在探索Nokogiri,并遇到了一个令人困惑的问题,我会很感激某些观点。 NB我也是Ruby的新手,所以我期待做一些非常糟糕的事情。如果是这种情况,请道歉。
我有一个简单的测试,它将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等于零。
提前致谢。
答案 0 :(得分:1)
你有两个问题。
首先,xpath应为“// accounts / account / messagesremaining”。
其次,您有一个默认命名空间“http:// api ...”。在执行xpath查询时,您需要指定每个元素的命名空间(css查询忽略命名空间)。
抱歉,我不知道Nokogiri,但我有一些关于如何在xpath查询中使用命名空间的文档。