我试图在带有builder gem的Ruby on Rails应用程序中构建此示例:
<?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"
会起作用,但事实并非如此。
请帮助!
答案 0 :(得分:7)
想出来:
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/>
答案 1 :(得分:2)
来自Builder&#39的文档:http://builder.rubyforge.org/
现在可以获得对XML命名空间的一些支持。如果是第一个 标记调用的参数是一个符号,它将被连接到标记中 生成命名空间:标签组合。这比显示更容易 形容它。
xml.SOAP:Envelope do ... end
只需在命名空间中的冒号前放置一个空格,即可为构建器生成正确的表单(例如 &#34; SOAP:信封&#34; =&GT; &#34; xml.SOAP:Envelope&#34;)
所以,你可以这样写:
xml.gp :contactGet do
xml.campaignID("1033")
xml.contactID("199434")
end
答案 2 :(得分: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>