Разные результаты между запросами xpath и css - PullRequest
1 голос
/ 10 апреля 2011

Я изучаю Нокогири и столкнулся с недоумением, с которым я бы хотел ознакомиться.NB. Я также довольно новичок в Ruby, поэтому я ожидаю, что сделал что-то действительно глупое.Извините, если это так.

У меня есть простой тест, который сравнивает результаты запроса XPath и запроса CSS в документе XML.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 Ответ

1 голос
/ 10 апреля 2011

У вас есть две проблемы.

Сначала xpath должен быть "//accounts/account/messagesremaining".

Во-вторых, у вас есть пространство имен по умолчанию" http://api. .. ".Вам нужно указать пространство имен каждого элемента при выполнении запроса xpath (css-запросы игнорируют пространство имен).

Извините, я не знаю Nokogiri, но у меня есть некоторая документация о том, как использовать пространства именпо запросам xpath.

...