-1

我有一个 Nokogiri 节点,我正在执行一个 xpath 查询,它应该返回一个 NodeSet。相反,它返回一个字符串。我检查了xml源,发现数据只包含一个元素而不是多个元素。

它不应该返回一个只有一个值的 NodeSet,而不是一个字符串吗?我该如何处理?

这是正确返回具有 2 个条目的 NodeSet的伪xml:

<root>
    <products>
        <product>
            <productID>1</productID>
        </product>
        <product>
            <productID>2</productID>
        </product>
    </product>
</root>

这是xpath 查询:

//root/products/product

如果 xml 只包含一个产品,我会得到一个 String 而不是一个带有 1 个条目的 NodeSet

<root>
    <products>
        <product>
            <productID>1</productID>
        </product>
    </product>
</root>

2012 年 6 月 12 日更新:我仍然认为这是 Nokogiri 中的一个错误。上面的伪 xml 没有重现这种情况,但是我有几个来自客户端的 xml 示例,它们确实重现了这个问题。我可能会发布 xml 的混淆版本。无论如何,我已将代码更改为使用XmlSimple而不是 Nokogiri。

4

2 回答 2

1

为我工作:

require 'nokogiri'

xml = "<root><products>
  <product><productID>1</productID></products>
</product></root>"

p Nokogiri.XML(xml).xpath('//root/products/product').class,
  #=> Nokogiri::XML::NodeSet

  Nokogiri::VERSION,
  #=> "1.5.2"

  RUBY_DESCRIPTION
  #=> "ruby 1.9.3p125 (2012-02-16) [x86_64-darwin11.3.0]"

要么是您的 Nokogiri 版本不好(可能是依赖坏的 libxml2 版本),要么是您的代码完全不同,您需要为我们提供重现问题的方法。

于 2012-05-17T20:49:00.497 回答
0

我也遇到了这个“问题”,但是经过一番挠头后,我发现我做错了什么......我试图通过打印结果来调试 xpath

product_element = Nokogiri.XML(xml).xpath('//root/products/product')
print "product_element is - #{product_element}\n"

打印出元素的字符串版本,但是当我使用

product_element = Nokogiri.XML(xml).xpath('//root/products/product')
p product_element

正确地将其显示为 NodeSet。

...这可能不是发生在你身上的事情,但是

于 2012-05-28T22:05:14.987 回答