gpt4 book ai didi

ruby - 获取没有文本节点的元素的子元素

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:05 24 4
gpt4 key购买 nike

我正在使用 Nokogiri 和 Ruby 来解释 XML 文件的内容。我想获得所有元素的数组(或类似元素),这些元素是 <where> 的直接子元素在我的例子中。但是,我得到了各种我不想要的文本节点(例如 "\n\t\t\t" )。有什么办法可以删除或忽略它们吗?

@body = "
<xml>
<request>
<where>
<username compare='e'>Admin</username>
<rank compare='gt'>5</rank>
</where>
</request>
</xml>" #in my code, the XML contains tab-indentation, rather than spaces. It is edited here for display purposes.

@noko = Nokogiri::XML(@body)
xml_request = @noko.xpath("//xml/request")
where = xml_request.xpath("where")
c = where.children
p c

上面的 Ruby 脚本输出:

[#<Nokogiri::XML::Text:0x100344c "\n\t\t\t">, #<Nokogiri::XML::Element:0x1003350 name="username" attributes=[#<Nokogiri::XML::Attr:0x10032fc name="compare" value="e">] children=[#<Nokogiri::XML::Text:0x1007580 "Admin">]>, #<Nokogiri::XML::Text:0x100734c "\n\t\t\t">, #<Nokogiri::XML::Element:0x100722c name="rank" attributes=[#<Nokogiri::XML::Attr:0x10071d8 name="compare" value="gt">] children=[#<Nokogiri::XML::Text:0x1006cec "5">]>, #<Nokogiri::XML::Text:0x10068a8 "\n\t\t">]

我想以某种方式获得以下对象:

[#<Nokogiri::XML::Element:0x1003350 name="username" attributes=[#<Nokogiri::XML::Attr:0x10032fc name="compare" value="e">] children=[#<Nokogiri::XML::Text:0x1007580 "Admin">]>, #Nokogiri::XML::Element:0x100722c name="rank" attributes=[#<Nokogiri::XML::Attr:0x10071d8 name="compare" value="gt">] children=[#<Nokogiri::XML::Text:0x1006cec "5">]>]

目前我可以使用

解决这个问题
c.each{|child|
if !child.text?
...
end
}

但是c.length == 5 .如果有人可以建议如何从 c 中排除直接子文本节点,那将使我的生活更轻松,这样 c.length == 2

最佳答案

您有(至少)三个选项可供选择:

  1. 使用 c = where.element_children而不是 c = where.children

  2. 直接只选择子元素:
    c = xml_request.xpath('./where/*')
    c = where.xpath('./*')

  3. 将 child 列表过滤到only those that are elements :
    c = where.children.select(&:element?)

关于ruby - 获取没有文本节点的元素的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com