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

如何使用Nokogiri在XML的<moto>标签中插入true文本内容?

给Nokogiri生成的XML节点添加文本内容的解决方法

嘿,我懂你现在遇到的问题——用Ruby的Nokogiri修改XML时,生成的<moto/>是空的自闭合标签,而你需要的是<moto>true</moto>这种带文本内容的标签。其实只需要给节点添加上文本内容就行,下面给你几种可行的修改方式:

方法一:创建节点后设置文本内容

直接在你原来的代码基础上,给新创建的节点添加content赋值语句:

doc = Nokogiri::XML(....file...)
doc.children.each do |node|
  if node.name == 'payment_transaction'
    span = Nokogiri::XML::Node.new "moto", doc
    span.content = "true" # 关键:给节点设置文本内容
    node.add_child(span)
  end
end

方法二:更简洁的链式写法

如果你喜欢更紧凑的代码,可以用tap方法一步完成节点创建和文本设置:

doc = Nokogiri::XML(....file...)
doc.children.each do |node|
  if node.name == 'payment_transaction'
    node.add_child(Nokogiri::XML::Node.new("moto", doc).tap { |n| n.content = "true" })
  end
end

方法三:使用create_element直接生成带文本的节点

Nokogiri还提供了更直观的create_element方法,第二个参数可以直接传入节点文本:

doc = Nokogiri::XML(....file...)
doc.children.each do |node|
  if node.name == 'payment_transaction'
    moto_node = doc.create_element("moto", "true")
    node.add_child(moto_node)
  end
end

为什么原来的代码会生成空标签?因为你只创建了节点对象,但没有给它设置任何文本内容,Nokogiri默认就会生成自闭合的空标签。只要给节点的content属性赋值,它就会变成包含文本的完整标签啦。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:06