【问题标题】:How to add namespaces and prefixes to elements using Groovy Markup Builder如何使用 Groovy Markup Builder 为元素添加命名空间和前缀
【发布时间】:2018-11-27 01:08:09
【问题描述】:

我正在使用 Mule ESB 将输入 JSON 转换为要发送到 SOAP Web 服务的 XML。我能够构建结构并将命名空间添加到根元素,但我的 SOAP 需要的 XML 输出非常精确,并且要求元素中的前缀和命名空间。

这是我的 Groovy 脚本:

def xml = new StringWriter().with { w -> new groovy.xml.MarkupBuilder(w).with {
        SaveContact('http://tempuri.org/') {
            contact() {  
                Address('http://schemas.datacontract.org/2004/07/PivotalService.Entities')   
                {
                    Address1(payload.Address1)
                    Address2(payload.Address2)
                    Address3(payload.Address3)
                    City(payload.City)
                    Country(payload.Country)
                    Fax(payload.Fax)
                    Mobile(payload.Mobile)
                    Phone(payload.Phone)
                    PhoneExtension(payload.PhoneExtension)
                    State(payload.State)
                    Workphone(payload.Workphone)
                    WorkphoneExtension(payload.WorkphoneExtension)
                    Zip(payload.Zip)
                }
                ContactId(payload.ContactId)
                Email(payload.Email)
                Firstname(payload.Firstname)
                Gender(payload.Gender)
                Language(payload.Language)
                Lastname(payload.Lastname)
                PrestashopId(payload.PrestashopId)
            }
            Consent(payload.Consent)
        }
    }
    w.toString()
}

这是它给我的输出示例:

<SaveContact xmlns='http://tempuri.org/'>
  <contact>
    <Address xmlns='http://schemas.datacontract.org/2004/07/PivotalService.Entities'>
      <Address1>2, test street</Address1>
      <Address2>Appartement 10</Address2>
      <Address3 />
      <City>Montreal</City>
      <Country>Canada</Country>
      <Fax />
      <Mobile>+1(418)123-1234</Mobile>
      <Phone>+1(418)123-1234</Phone>
      <PhoneExtension />
      <State>Québec</State>
      <Workphone />
      <WorkphoneExtension />
      <Zip>A1A1A1</Zip>
    </Address>
    <ContactId />
    <Email></Email>
    <Firstname>fooo</Firstname>
    <Gender>1</Gender>
    <Language>3</Language>
    <Lastname>baaarrr</Lastname>
    <PrestashopId>172</PrestashopId>
  </contact>
  <Consent></Consent>
</SaveContact>

如您所见,在添加到元素时,命名空间甚至不起作用。

这是我想要的 XML(我不确定是否需要前缀 (ns0..etc)):

<?xml version="1.0" encoding="ISO-8859-1"?>
<ns0:SaveContact xmlns:ns0="http://tempuri.org/">
  <ns0:contact>
    <ns1:Address xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">
      <ns1:Address1>2, test street</ns1:Address1>
      <ns1:Address2>Appartement 10</ns1:Address2>
      <ns1:City>Montreal</ns1:City>
      <ns1:Country>Canada</ns1:Country>
      <ns1:Mobile>+1(418)123-1234</ns1:Mobile>
      <ns1:Phone>+1(418)123-1234</ns1:Phone>
      <ns1:State>Quebec</ns1:State>
      <ns1:WorkPhone>+1(418)123-1234</ns1:WorkPhone>
      <ns1:Zip>A1A1A1</ns1:Zip>
    </ns1:Address>
    <ns1:Email xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">null</ns1:Email>
    <ns1:Firstname xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">fooo</ns1:Firstname>
    <ns1:Gender xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">1</ns1:Gender>
    <ns1:Language xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">3</ns1:Language>
    <ns1:Lastname xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">baaarrr</ns1:Lastname>
    <ns1:PrestashopId xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">172</ns1:PrestashopId>
  </ns0:contact>
</ns0:SaveContact>

感谢您的帮助。

【问题讨论】:

标签: xml soap groovy mule


【解决方案1】:

下面的实现可能很有用:

def entityNs = [
    'xmlns:ns1': "http://schemas.datacontract.org/2004/07/PivotalService.Entities"
]

继续上面的内容,进行如下更改:

....
"ns1:Email"(entityNs, 'foo')
"ns1:Firstname"(entityNs, 'Bar')
....

【讨论】:

  • 谢谢,这正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 2014-08-17
  • 2012-10-22
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
相关资源
最近更新 更多