如何使用Nokogiri生成带ns3命名空间的<exemplo>XML标签?
如何用Nokogiri生成带ns3命名空间的XML元素
嘿,这个需求我之前刚好处理过!要生成带ns3前缀的<ns3:exemplo>teste</ns3:exemplo>,核心是要在Nokogiri的Builder里正确绑定命名空间前缀和对应的URI——这是XML规范的强制要求,你可以把URI换成自己项目专属的命名空间地址。
下面给你两种实用的实现方式:
方式一:单个元素直接声明命名空间
如果只需要生成这一个带前缀的元素,可以直接在创建元素时同时声明命名空间:
teste = Nokogiri::XML::DocumentFragment.parse("") Nokogiri::XML::Builder.with(teste) do |x| # 用send调用带冒号的方法名,同时添加命名空间声明属性 x.send(:"ns3:exemplo", "teste", "xmlns:ns3" => "http://your-project-namespace.com") end puts teste.to_xml
输出结果:
<ns3:exemplo xmlns:ns3="http://your-project-namespace.com">teste</ns3:exemplo>
方式二:父元素统一声明命名空间
如果后续还要生成其他同前缀的元素,推荐在父元素上统一声明命名空间,子元素可以直接复用前缀:
teste = Nokogiri::XML::DocumentFragment.parse("") Nokogiri::XML::Builder.with(teste) do |x| # 在父节点声明ns3对应的命名空间URI x.root(xmlns: { ns3: "http://your-project-namespace.com" }) do # 用下划线代替冒号,Nokogiri会自动转换成前缀格式 x.ns3_exemplo "teste" # 还可以轻松添加其他同前缀元素 x.ns3_outro "更多内容" end end puts teste.to_xml
输出结果:
<root xmlns:ns3="http://your-project-namespace.com"> <ns3:exemplo>teste</ns3:exemplo> <ns3:outro>更多内容</ns3:outro> </root>
小提示
- XML的命名空间前缀(比如
ns3)必须绑定一个合法的URI,这是规范要求,不能省略。 - Nokogiri Builder支持两种前缀写法:要么用
send(:"ns3:exemplo")直接调用带冒号的方法,要么用ns3_exemplo(下划线会自动转成冒号)。
内容的提问来源于stack exchange,提问作者Ailton
相关产品推荐
相关产品推荐

