You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nokogiri解析XML字符串:如何让children方法返回全部子节点内容

解决Nokogiri解析多节点XML片段只返回第一个节点的问题

嘿,这个问题我之前也踩过坑!原因很明确:你传入的是没有根节点的XML片段,而Nokogiri::XML()是用来解析完整XML文档的,完整XML要求必须有且仅有一个根元素,所以Nokogiri只识别了第一个<moreThan>节点,后面的<lessThan>被当作无效内容忽略了。

这里有两种靠谱的解决方式:

方法一:给XML片段添加根节点

手动给你的节点套一个根元素,让它成为合法的完整XML文档,之后就能通过根节点的children获取所有子元素:

# 给片段加上根节点<root>
doc = Nokogiri::XML('<root><moreThan>8</moreThan><lessThan>13</lessThan></root>')
# 输出所有子节点的XML内容
puts doc.root.children.to_xml

执行后就能得到你想要的:<moreThan>8</moreThan><lessThan>13</lessThan>

方法二:直接解析XML片段(无需根节点)

如果你不想额外加根节点,可以用Nokogiri::XML::DocumentFragment来解析XML片段,它专门处理这种没有根的节点集合:

# 用DocumentFragment解析片段
fragment = Nokogiri::XML::DocumentFragment.parse('<moreThan>8</moreThan><lessThan>13</lessThan>')
# 输出所有子节点的XML内容
puts fragment.children.to_xml

这种方式更直接,不需要修改原始的XML字符串,就能获取到所有节点。

内容的提问来源于stack exchange,提问作者Noémie Harvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:20:57