0

我对 libxml-ruby 有疑问。
有一个 xml 文件“sample.xml”。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://***" xmlns:r="http://???">
    <sheetData>
        <row><v>1</v></row>
    </sheetData>
</worksheet>

我想在不指定默认命名空间的情况下处理节点,如下所示。

xml = XML::Document.file('sample.xml')
sheet_data = xml.find_first('sheetData')

当然,我可以像下面那样做。

NS = {
  main: 'http://***',
  r: 'http://???',
}
sheet_data = xml.find_first('main:sheetData', NS)

但我想省略默认命名空间的字符串。
我尝试了一些属于 XML::Namespace[s] 的属性和方法,但没有生效。

当我保存一个 xml 文件时还有一个问题。

ns = XML::Namespace.new(xml.root, 'main', 'http://***')
row = XML::Node.new('row', nil, ns)
sheet_data << row
xml.save("sample.xml")

发布如下。

<row><v>1</v></row>
<main:row/>

我希望它省略了“main:”字符串。所以我这样做,但它真的很难看。

open('sample.xml', 'wb') do |f|
  f.write(xml.to_s.gsub(/(<\/?)main:/, '\1'))
end

你有什么好主意吗?

4

0 回答 0