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
相关产品推荐
相关产品推荐

