Удалите объявление заголовка XML и предоставьте пространства имен XML без префикса в DataWeave 2.0 - PullRequest
0 голосов
/ 15 марта 2019

Я хочу, чтобы XML выглядел так, как показано ниже, без заголовков:

<LicenseCodeRequest xmlns="http://www.gilmore.ca/services/eVantageBookLicense" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">    
    <ClientID>XXX</ClientID>    
    <PartNumber>1000-VS1</PartNumber>    
    <Qty>2</Qty>    
    <CustomerOrderNumber>56789</CustomerOrderNumber>    
    <BillingReferenceID>1234</BillingReferenceID>    
    <SoldToCode>XX-XXX</SoldToCode>    
    <Students>
      <Student>
         <StudentID>1</StudentID>
         <StudentFirstName>Some</StudentFirstName>
         <StudentLastName>One</StudentLastName>
         <StudentEmail>someone@exampe.com</StudentEmail>
      </Student>
      <Student>
         <StudentID>2</StudentID>
         <StudentFirstName>Another</StudentFirstName>
         <StudentLastName>One</StudentLastName>
         <StudentEmail>anotherone@exampe.com</StudentEmail>
      </Student>    
   </Students>    
   <SendStudentEmail>false</SendStudentEmail>    
   <ContactFirstName>me</ContactFirstName>    
   <ContactLastName>myself</ContactLastName>    
   <ContactEmail>me.myself@example.com</ContactEmail>    
   <SendContactEmail>true</SendContactEmail>    
   <ShipAddress1>123</ShipAddress1>    
   <ShipAddress2></ShipAddress2>    
   <ShipCity>someplace</ShipCity>    
   <ShipState>NM</ShipState>    
   <ShipCountry>US</ShipCountry>    
   <ShipZipcode>54481</ShipZipcode>    
   <Language>en</Language>    
   <AssignmentApplication>false</AssignmentApplication> 
</LicenseCodeRequest>

Тем не менее, при предварительном просмотре вывода моего сообщения Transform я вижу следующее:

<?xml version='1.0' encoding='UTF-8'?>

, что приведет к сбою отправки в API поставщика.

Вопрос 1: Как мне избавиться от этого заголовка?

Вопрос 2: Как добавить ДВА пространства имен, добавленные в строку XML.В моем хранилище данных есть следующее:

%dw 2.0
output application/xml  
ns gilmore http://www.gilmore.ca/services/eVantageBookLicense 
ns w3i http://www.w3.org/2001/XMLSchema-instance
---
LicenseCodeRequest: {   
  ClientID: XXX,   
  PartNumber: "1000-VS1",   
  Qty: 1,   
  CustomerOrderNumber: 56789,   
  BillingReferenceID: 1234,   
  SoldToCode: "XX-XXXX",   
  Students: {       
    Student: {
      StudentID: 1,
      StudentFirstName: "Some",
      StudentLastName: "One",
      StudentEmail:payload.email,       
    }   
  },   
  SendStudentEmail: false,   
  ContactFirstName: "me",   
  ContactLastName: "myself",   
  ContactEmail: "me.myself@example.com",   
  SendContactEmai: true,   
  ShipAddress1: 123,   
  ShipAddress2: "",   
  ShipCity: "someplace",   
  ShipState: "NM",   
  ShipCountry: "US",   
  ShipZipcode: 54481,   
  Language: "en",   
  AssignmentApplication: false 
}

Если я добавлю gilmore# перед LicenseCodeRequest:, это изменит выход на:

gilmore:LicenseCodeRequest xmlns="http://www.gilmore.ca/services/eVantageBookLicense"

НО:

  1. Я не хочу, чтобы оно было gilmore:LicenseCodeRequest... Мне просто нужно, чтобы оно было LicenseCodeRequest... и
  2. Мне нужно получить 2-е пространство имен в том же теге.

Как мне это сделать?

Заранее большое спасибо.

1 Ответ

0 голосов
/ 19 марта 2019

Вы можете использовать writeDeclaration=false в выходном заголовке (документы здесь )

Пример:

%dw 2.0
output application/xml writeDeclaration=false
---
[insert transformation code here]

Я думаю, что у вас будет трудныйвремя с пространствами имен, но вы можете попробовать это взломать и использовать атрибуты вместо того, что вы пытаетесь достичь.Я бы просто рекомендовал использовать множество комментариев, потому что то, что вы делаете, является нестандартным поведением:

%dw 2.0
output application/xml writeDeclaration=false

var xmlns  = "http://www.gilmore.ca/services/eVantageBookLicense"
var xmlnsi = "http://www.w3.org/2001/XMLSchema-instance"
---
{
  LicenseCodeRequest @("xmlns": xmlns, "xmlns:i": xmlnsi): {
    ClientId: ...
    ...
  }
}

Более практичные примеры использования атрибутов XML можно найти в DataWeave 2.0 здесь .

...