Nokogiri 的 xml 输出上的命名空间



我正在尝试使用 nokogiri 隔离使用命名空间的 xml 文档的一部分:

require 'nokogiri'
xml= "<s:Some xmlns:s="http://nmsc.com/nmsc"><s:One></s:One></s:Some>"
n= Nokogiri.XML(xml)
n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0].to_xml

这忽略了命名空间并简单地输出

"<s:One/>"

如何使用正确的命名空间生成 XML,即:

<s:One xmlns:s="http://nmsc.com/nmsc" />

有趣的是命名空间在那里:

> n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0]
=> #(Element:0x3fb1a05d0ed0 {
  name = "One",
  namespace = #(Namespace:0x3fb1a05d1fc4 {
    prefix = "s",
    href = "http://nmsc.com/nmsc"
    })
  })

to_xml不包括它。

如果创建新的 XML 文档并将所选节点添加到其中,则将包含命名空间信息:

require 'nokogiri'
xml = "<s:Some xmlns:s="http://nmsc.com/nmsc"><s:One></s:One></s:Some>"
n = Nokogiri.XML(xml)
selected = n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0]
doc = Nokogiri::XML::Document.new
doc.root = selected
puts doc.to_xml

输出:

<?xml version="1.0"?>
<s:One xmlns:s="http://nmsc.com/nmsc"/>

相关内容

  • 没有找到相关文章

最新更新