xpath和css查询之间的结果不同

时间:2011-04-09 22:00:51

标签: nokogiri

我正在探索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等于零。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你有两个问题。

首先,xpath应为“// accounts / account / messagesremaining”。

其次,您有一个默认命名空间“http:// api ...”。在执行xpath查询时,您需要指定每个元素的命名空间(css查询忽略命名空间)。

抱歉,我不知道Nokogiri,但我有一些关于如何在xpath查询中使用命名空间的文档。