6

我尝试使用构建器 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"

会工作,但它没有。

请帮忙!

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

来自 Builder 的文档:http ://builder.rubyforge.org/

现在可以使用对 XML 命名空间的一些支持。如果标签调用的第一个参数是一个符号,它将被连接到标签以产生一个命名空间:标签组合。展示它比描述它更容易。

xml.SOAP :信封做...结束

只需在命名空间中的冒号前放置一个空格,即可为构建器生成正确的表单(例如“SOAP:Envelope”=>“xml.SOAP :Envelope”)

所以,你可以这样写:

xml.gp :contactGet do
  xml.campaignID("1033")
  xml.contactID("199434")
end
于 2014-04-01T12:50:24.767 回答
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 回答