使用 nokogiri 将节点标记为文本
Node tag as text with nokogiri
我有以下 XML:
<DaysOfWeek>
<MondayToSunday/>
</DaysOfWeek>
我正在使用 Nokogiri,如果我调用 node.name
它 returns "text"。如何获取标签的实际名称,例如 "MondayToSunday"?
您的元素已经存在,标签名称为 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
然后,当我们运行这个例子时,我们可以看到我们实际上有三个children用于DaysOfWeek
标签:
Name: text
"\n "
Name: MondayToSunday
""
Name: text
"\n"
其中有两个名为 text
的地方有新行,并且在标签 MondayToSunday
.
之间
我们无法判断您是如何使用 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 有 chock-full 种隔离特定标签的方法,这是它的强项;找到它,获取有关它的信息,然后移动到下一个并重复。
这些都在常规文档和 cheat sheet 中。
我有以下 XML:
<DaysOfWeek>
<MondayToSunday/>
</DaysOfWeek>
我正在使用 Nokogiri,如果我调用 node.name
它 returns "text"。如何获取标签的实际名称,例如 "MondayToSunday"?
您的元素已经存在,标签名称为 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
然后,当我们运行这个例子时,我们可以看到我们实际上有三个children用于DaysOfWeek
标签:
Name: text
"\n "
Name: MondayToSunday
""
Name: text
"\n"
其中有两个名为 text
的地方有新行,并且在标签 MondayToSunday
.
我们无法判断您是如何使用 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 有 chock-full 种隔离特定标签的方法,这是它的强项;找到它,获取有关它的信息,然后移动到下一个并重复。
这些都在常规文档和 cheat sheet 中。