6

ビルダーgemを使用してRubyonRailsアプリでこのサンプルを構築しようとしています:

<?xml version="1.0" encoding="utf-8"?> 
<ngp:contactGet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ngp="http://www.ngpsoftware.com/ngpapi"> 
<campaignID>1033</campaignID> 
<contactID>199434</contactID> 
</ngp:contactGet>

次のように、名前空間を使用してタグを生成できます。

xml = Builder::XmlMarkup.new
xml.ngp :contactGet

...しかし、そのタグ内の属性を取得できません。

私はそれを思うだろう

xml.ngp :contactGet("xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance" "xmlns:ngp" =>"http://www.ngpsoftware.com/ngpapi"

動作しますが、動作しません。

助けてください!

4

3 に答える 3

8

理解した:

xml.tag!('gp:contactGet', {"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:ngp"=>"http://www.ngpsoftware.com/ngpapi"}) do 
  xml.campaignID("1033")
  xml.contactID("199434")
end

生産する...

<?xml version="1.0" encoding="UTF-8"?>
<gp:contactGet xmlns:ngp="http://www.ngpsoftware.com/ngpapi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <campaignID>1033</campaignID>
  <contactID>199434</contactID>
</gp:contactGet><to_s/>
于 2012-05-11T15:00:46.377 に答える
2

の代わりにこの構文を使用できます。xml.tag!('gp:contactGet')

xml.gp :contactGet do 
  xml.contactID, "199434"
end

また、ブロック内のタグの名前空間が必要な場合は、次の構文を使用できます。この情報はどこにも見つからなかったので、ここに追加します。

xml.tag!('gp:contactGet') do 
  xml.gp :contactID, "199434"
end

次のマークアップを付与するには:

<gp:contactGet>
  <gp:contactID>199434</gp:contactID>
</gp:contactGet>
于 2016-09-20T05:12:25.987 に答える
2

Builder のドキュメントから: http://builder.rubyforge.org/

XML 名前空間の一部がサポートされるようになりました。タグ呼び出しの最初の引数がシンボルの場合、タグに結合されて名前空間: タグの組み合わせが生成されます。これは、説明するよりも示す方が簡単です。

xml.SOAP :Envelope do ... end

名前空間のコロンの前にスペースを入れるだけで、ビルダーに適した形式になります (例: "SOAP:Envelope" => "xml.SOAP :Envelope")。

したがって、次のように書くことができます。

xml.gp :contactGet do
  xml.campaignID("1033")
  xml.contactID("199434")
end
于 2014-04-01T12:50:24.767 に答える