2

次のようなルビークラスがあります。

class MyResponse
    attr_accessor :results
    def initialize(results = nil)
        @results = results
    end
end

このコードでは、

resp = MyResponse.new 'Response text'
qname = XSD::QName.new('http://www.w3schools.com/furniture', :MyResponse)
xml = XSD::Mapping.obj2xml(resp, qname)
puts xml

そのクラスからこのxmlを生成することができました:

<?xml version="1.0" encoding="utf-8" ?>
<n1:MyResponse xmlns:n1="http://www.w3schools.com/furniture">
  <results>Response text</results>
</n1:MyResponse>

しかし、<results>ノードにも名前空間プレフィックスを付けたいと思います<n1:results>

私は長い間これを理解しようとしています。私を助けてください。

編集:すべてのノードに名前空間プレフィックスが必要です。私は他の方法やライブラリを受け入れています。

4

2 に答える 2

2

ROXMLを使用して XML を読み書きするのが大好きです。残念ながら、ドキュメントは完全ではありませんが、コード ドキュメントから直接多くの情報を取得できます。私はあなたの要件を正確に満たす例を示すことに成功しませんでした (xmlns ノードは xmlns:n1 ではなく xmlns のみです) が、おそらくそれを完了することができます:

require 'roxml'

class Response
    include ROXML

    xml_name 'MyResponse'

    xml_namespace :n1

    xml_accessor :xmlns, from: :attr
    xml_accessor :results, from: "n1:results"

    def initialize
        @xmlns = "http://www.w3schools.com/furniture"
    end

end

response = Response.new
response.results = "Response text"
puts '<?xml version="1.0" encoding="utf-8" ?>'
puts response.to_xml
# <?xml version="1.0" encoding="utf-8" ?>
# <n1:MyResponse xmlns="http://www.w3schools.com/furniture">
#   <n1:results>Response text</n1:results>
# </n1:MyResponse>
于 2013-04-10T18:01:44.283 に答える