如何获取tag.contents

发布于 2024-12-11 12:22:57 字数 861 浏览 0 评论 0原文

我有这个 XML:

<record>
    <f id="27">John Smith</f>
    <f id="28"/>
</record>

并用 Nokogiri 解析它:

# I get the record from the whole document
... 
fields = record.xpath("f")
for field in fields
    puts field.content
end

它返回这个:

John Smith
\n 28 \n

这是不正确的。第二个 field 标签内没有任何内容,它应该返回一个空值。正确的?

顺便说一句,同样的事情也发生在 LibXML 上。

这是实际代码:

xml = Nokogiri::XML("<?xml version="1.0" ?><records><record><f id="27">John Smith</f><f id="38"/></record></records>")

records = xml.xpath("//record")
records.map{|record|
    fields = record.xpath("f")
    fields.to_enum(:each_with_index).collect{|field,index|
        [field.content, index]
    }
}

I have this XML:

<record>
    <f id="27">John Smith</f>
    <f id="28"/>
</record>

and parse it with Nokogiri this way:

# I get the record from the whole document
... 
fields = record.xpath("f")
for field in fields
    puts field.content
end

which returns this:

John Smith
\n 28 \n

This is incorrect. The second field tag does not have anything inside the tag, it should return an empty value. Right?

By the way, the same thing happens with LibXML.

This is the Actual code:

xml = Nokogiri::XML("<?xml version="1.0" ?><records><record><f id="27">John Smith</f><f id="38"/></record></records>")

records = xml.xpath("//record")
records.map{|record|
    fields = record.xpath("f")
    fields.to_enum(:each_with_index).collect{|field,index|
        [field.content, index]
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

平生欢 2024-12-18 12:22:57

我来回答这个问题。该标签中可能包含您可能错过的其他标签。

I'll answer the question. The tag probably contains other tags in it that you might've missed.

離人涙 2024-12-18 12:22:57

您的 xpath 访问器是错误的:

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<record>
    <f id="27">John Smith</f>
    <f id="28"/>
</record>
EOT

puts doc.xpath('f').size # => 0
puts doc.xpath('//f').size # => 2

puts doc.xpath('//f[@id="27"]').size # => 1
puts doc.xpath('//f[@id="27"]').first.text # => "John Smith"
puts doc.at('//f').text # => "John Smith"

Nokogiri 始终返回带有 xpathcsssearch 方法的 NodeSet,以及 at< 的 Node /code> 及其别名。将 NodeSet 视为数组。

doc.xpath('//f[@id="27"]').class # => Nokogiri::XML::NodeSet < Object
doc.at('//f[@id="27"]').class # => Nokogiri::XML::Element < Nokogiri::XML::Node

Your xpath accessor is wrong:

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<record>
    <f id="27">John Smith</f>
    <f id="28"/>
</record>
EOT

puts doc.xpath('f').size # => 0
puts doc.xpath('//f').size # => 2

puts doc.xpath('//f[@id="27"]').size # => 1
puts doc.xpath('//f[@id="27"]').first.text # => "John Smith"
puts doc.at('//f').text # => "John Smith"

Nokogiri always returns a NodeSet with the xpath, css and search methods, and a Node for at and its aliases. Treat the NodeSet as an array.

doc.xpath('//f[@id="27"]').class # => Nokogiri::XML::NodeSet < Object
doc.at('//f[@id="27"]').class # => Nokogiri::XML::Element < Nokogiri::XML::Node
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文