带有nokogiri的节点标签为文本

时间:2019-07-17 08:52:42

标签: ruby nokogiri

我有以下XML:

<DaysOfWeek>
    <MondayToSunday/>
</DaysOfWeek>

我正在使用Nokogiri,如果我呼叫node.name,它将返回“文本”。如何获取标签的实际名称,例如“ MondayToSunday”?

2 个答案:

答案 0 :(得分:2)

您的元素已经存在,标签名称为MondayToSunday。问题是,当Nokogiri解析文档时,它还包含空白行,那么您需要将其过滤掉。

这是一个例子:

# ex.rb

require 'nokogiri'

xml = <<-XML
<DaysOfWeek>
    <MondayToSunday/>
</DaysOfWeek>
XML

days_of_week = Nokogiri::XML(xml).children

days_of_week.children.each do |el|
  puts "Name: #{el.name}"
  p el.text
end

然后,当我们运行此示例时,我们可以看到我们实际上为DaysOfWeek标签有三个孩子:

Name: text
"\n    "
Name: MondayToSunday
""
Name: text
"\n"

其中有两个名为text,其中有新行,并且在标签MondayToSunday之间。

答案 1 :(得分:-1)

我们无法告知您如何使用Nokogiri,因此做错这可能是一个简单的错误。这就是我要做的:

require 'nokogiri'

xml =<<EOT
<DaysOfWeek>
    <MondayToSunday/>
</DaysOfWeek>
EOT

doc = Nokogiri::XML.parse(xml)
doc.at('DaysOfWeek').name # => "DaysOfWeek"
doc.at('MondayToSunday').name # => "MondayToSunday"

at是查找与特定访问者匹配的第一个节点的快速方法,在这种情况下,该节点名为“ DaysOfWeek”或“ MondayToSunday”。 Nokogiri充满了各种方法来隔离特定标签,这就是它的优势。找到它,获取有关它的信息,然后移至下一个并重复。

这一切都在常规文档和cheat sheet中。