ruby - Nokogiri 的 xml 输出上的命名空间

标签 ruby xml nokogiri

我正在尝试使用 nokogiri 隔离使用 namespace 的 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"/>

关于ruby - Nokogiri 的 xml 输出上的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21889775/

相关文章:

ruby - 特定类别的 IRB 输出静音

css - 引用外部 DTD 文件

android - 如何更改SwitchCompat的字体系列?

ruby - 404 未找到,但可以从网络浏览器正常访问

ruby-on-rails - 使用 Mechanize/Nokogiri 提取文本

ruby-on-rails - 为什么parameterize第一次执行的时候特别慢

ruby - 文件私有(private)方法

ruby - 删除嵌套数组的一级

php - 使用 SimpleXML 加载远程 URL

ruby - 萨克斯用 nokogiri 解析奇怪的元素