Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用Nokogiri在具有特定id的元素中获取值?_Ruby_Xml_Parsing_Nokogiri - Fatal编程技术网

Ruby 如何使用Nokogiri在具有特定id的元素中获取值?

Ruby 如何使用Nokogiri在具有特定id的元素中获取值?,ruby,xml,parsing,nokogiri,Ruby,Xml,Parsing,Nokogiri,我有一个元素结构,由我用Nokogiri解析的项目节点组成: @xml.css('item').each do |item| # do something end 现在,该项有一个类似于9的部分,每个项都有一个id如下的元素): 不幸的是,这似乎以相同的顺序返回了所有值的字符串,而不是我正在查看的项目节点的特定值 有人知道如何解析customfieldvalue节点中的浮点值吗?您的问题是,您在xpath查询的开头使用了/,这告诉xpath引擎从文档的根开始查找匹配的所有内容,而不管您

我有一个元素结构,由我用Nokogiri解析的项目节点组成:

@xml.css('item').each do |item|
    # do something
end
现在,该项有一个类似于9的部分,每个项都有一个id如下的元素):

不幸的是,这似乎以相同的顺序返回了所有值的字符串,而不是我正在查看的项目节点的特定值


有人知道如何解析customfieldvalue节点中的浮点值吗?

您的问题是,您在xpath查询的开头使用了
/
,这告诉xpath引擎从文档的根开始查找匹配的所有内容,而不管您当前的节点如何。尝试改用
/

尝试使用XPath表达式标识元素并提取第一个匹配节点的文本:

@xml.xpath('//item').each do |item|
  path = "//customfield[@id='customfield_10004']/*/customfieldvalue"
  item.xpath(path).first.text.to_f // => 8.0, etc
end

谢谢,但当我使用
/
时,不会返回任何内容<代码>放置story.xpath(“./customfield[@id='customfield\u 10004']”)不返回任何内容。项目不是我所认为的吗?语法是
/
。点后有两条斜线!可以有多个customfieldvalue。啊,你的编辑地址。但我仍然认为它会返回所有值,而不是我所处项目的1?并且路径值不正确,返回一个错误。该代码将打印id为“customfield_10004”的第一个“customfieldvalue”元素内第一个“customfieldvalue”元素内文本的浮点值。谢谢。可以有多个id“customfield_10004”。每个项目都有一个。所以这不起作用,因为我们得到了所有的项目。我将把它添加到问题中。如果您为每个项目分别运行代码,那么每个项目都有一个具有相同id的节点就不重要了,对吗?但是上面的答案说,
/
从文档的根开始?或者您正在为每个项目创建一个新的xml?代码不起作用,路径变量中的Nokogiri出现了一个解析器错误。小心。
item.xpath("//customfield[@id='customfield_10004']").css('customfieldvalue')
@xml.xpath('//item').each do |item|
  path = "//customfield[@id='customfield_10004']/*/customfieldvalue"
  item.xpath(path).first.text.to_f // => 8.0, etc
end