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 ファイルを保存するときのもう 1 つの問題。

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