2016-04-21 4 views
0

Я новичок в XSLT и имею проблему с пространством имен. Вот мой XML, что я должен преобразовать:Преобразование XSLT для исключения пространства имен

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer"> 
<soapenv:Header/> 
<soapenv:Body> 
    <InputRequestID>?</InputRequestID> 
    <InputTimeStamp>?</InputTimeStamp> 
     <OrderInput> 

      <Recipient>?</Recipient> 

      <PortInFlag>?</PortInFlag> 

      <Donor>?</Donor> 

      <FMCFirstCompleteFlag>?</FMCFirstCompleteFlag> 

      <CreatedOn>?</CreatedOn> 

      <ACSBillingAccountIntegId>?</ACSBillingAccountIntegId> 

      <OrderType>?</OrderType> 

      <OrderReason>?</OrderReason> 

      <CustomerFirstName>?</CustomerFirstName> 

      <CustomerName>?</CustomerName> 

      <AgreementNum>?</AgreementNum> 

      <AgreedbyOwner>?</AgreedbyOwner> 

      <OriginalReceived>?</OriginalReceived> 

      <AgreementSignDate>?</AgreementSignDate> 

      <BusinessContactFirstName>?</BusinessContactFirstName> 

      <BusinessContactLastName>?</BusinessContactLastName> 

      <UserID>?</UserID> 

      <FMCMNPRequestId>?</FMCMNPRequestId> 

      <LegalContactFirstName>?</LegalContactFirstName> 

      <LegalContactLastName>?</LegalContactLastName> 

      <CreatedBy>?</CreatedBy> 

      <Comments>?</Comments> 

      <IntegrationID>?</IntegrationID> 

      <OrderId>?</OrderId> 

      <ReferenceOrder>?</ReferenceOrder> 

      <Status>?</Status> 

      <OrderTypeProvisioningRelevant>?</OrderTypeProvisioningRelevant> 

      <TriggerScript>?</TriggerScript> 

      <OrderSource>?</OrderSource> 

      <CustomerSegment>?</CustomerSegment> 

      <CustomerSubsegment>?</CustomerSubsegment> 

      <CustomerIdNumber>?</CustomerIdNumber> 

      <CustomerIdType>?</CustomerIdType> 

      <Priority>?</Priority> 

      <CustomerCode>?</CustomerCode> 

      <Urgent>?</Urgent> 

      <SalesPersonEmail>?</SalesPersonEmail> 

      <NotificationPhoneNumber>?</NotificationPhoneNumber> 

      <NotificationEmail>?</NotificationEmail> 

      <ASAP>?</ASAP> 

      <CustomerNotificationChannel>?</CustomerNotificationChannel> 

      <OrderCreatorEmail>?</OrderCreatorEmail> 

      <PrevCustomerRef>?</PrevCustomerRef> 

      <VIPFlag>?</VIPFlag> 
     </OrderInput> 
    </soapenv:Body> 
</soapenv:Envelope> 

Я использую следующий XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer" version="2.0"> 
<xsl:output method="xml" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="/"> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://bre-sc/ServiceOrderToTechnicalOrderTransformer"> 
     <soapenv:Body> 
      <ser:ServiceOrderToTechnicalOrderTransformerRequest> 
       <xsl:copy-of select="soapenv:Envelope/soapenv:Body/OrderInput" /> 
      </ser:ServiceOrderToTechnicalOrderTransformerRequest> 
     </soapenv:Body> 
    </soapenv:Envelope> 
</xsl:template> 

Результат является:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://bre-sc/ServiceOrderToTechnicalOrderTransformer"> 
<soapenv:Body> 
    <ser:ServiceOrderToTechnicalOrderTransformerRequest> 
     <OrderInput **xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer"**> 
      <Recipient> 
       ? 
      </Recipient> 
      <PortInFlag> 
       ? 
      </PortInFlag> 
      <Donor> 
       ? 
      </Donor> 
      <FMCFirstCompleteFlag> 
       ? 
      </FMCFirstCompleteFlag> 
      <CreatedOn> 
       ? 
      </CreatedOn> 
      <ACSBillingAccountIntegId> 
       ? 
      </ACSBillingAccountIntegId> 
      <OrderType> 
       ? 
      </OrderType> 
      <OrderReason> 
       ? 
      </OrderReason> 
      <CustomerFirstName> 
       ? 
      </CustomerFirstName> 
      <CustomerName> 
       ? 
      </CustomerName> 
      <AgreementNum> 
       ? 
      </AgreementNum> 
      <AgreedbyOwner> 
       ? 
      </AgreedbyOwner> 
      <OriginalReceived> 
       ? 
      </OriginalReceived> 
      <AgreementSignDate> 
       ? 
      </AgreementSignDate> 
      <BusinessContactFirstName> 
       ? 
      </BusinessContactFirstName> 
      <BusinessContactLastName> 
       ? 
      </BusinessContactLastName> 
      <UserID> 
       ? 
      </UserID> 
      <FMCMNPRequestId> 
       ? 
      </FMCMNPRequestId> 
      <LegalContactFirstName> 
       ? 
      </LegalContactFirstName> 
      <LegalContactLastName> 
       ? 
      </LegalContactLastName> 
      <CreatedBy> 
       ? 
      </CreatedBy> 
      <Comments> 
       ? 
      </Comments> 
      <IntegrationID> 
       ? 
      </IntegrationID> 
      <OrderId> 
       ? 
      </OrderId> 
      <ReferenceOrder> 
       ? 
      </ReferenceOrder> 
      <Status> 
       ? 
      </Status> 
      <OrderTypeProvisioningRelevant> 
       ? 
      </OrderTypeProvisioningRelevant> 
      <TriggerScript> 
       ? 
      </TriggerScript> 
      <OrderSource> 
       ? 
      </OrderSource> 
      <CustomerSegment> 
       ? 
      </CustomerSegment> 
      <CustomerSubsegment> 
       ? 
      </CustomerSubsegment> 
      <CustomerIdNumber> 
       ? 
      </CustomerIdNumber> 
      <CustomerIdType> 
       ? 
      </CustomerIdType> 
      <Priority> 
       ? 
      </Priority> 
      <CustomerCode> 
       ? 
      </CustomerCode> 
      <Urgent> 
       ? 
      </Urgent> 
      <SalesPersonEmail> 
       ? 
      </SalesPersonEmail> 
      <NotificationPhoneNumber> 
       ? 
      </NotificationPhoneNumber> 
      <NotificationEmail> 
       ? 
      </NotificationEmail> 
      <ASAP> 
       ? 
      </ASAP> 
      <CustomerNotificationChannel> 
       ? 
      </CustomerNotificationChannel> 
      <OrderCreatorEmail> 
       ? 
      </OrderCreatorEmail> 
      <PrevCustomerRef> 
       ? 
      </PrevCustomerRef> 
      <VIPFlag> 
       ? 
      </VIPFlag> 
     </OrderInput> 
    </ser:ServiceOrderToTechnicalOrderTransformerRequest> 
</soapenv:Body> 

Я пытаюсь удалить пространство имен в InputOrder из результата, но это не работает для меня. Может ли кто-нибудь помочь мне с XSLT? Благодарю.

ответ

0

Это может быть достигнуто путем внесения незначительных изменений в таблицу стилей, как показано ниже.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" /> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/"> 
     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:ser1="http://bre-sc/ServiceOrderToTechnicalOrderTransformer" 
      xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer"> 
      <soapenv:Body> 
       <ser:ServiceOrderToTechnicalOrderTransformerRequest> 
        <xsl:copy-of select="soapenv:Envelope/soapenv:Body/OrderInput" /> 
       </ser:ServiceOrderToTechnicalOrderTransformerRequest> 
      </soapenv:Body> 
     </soapenv:Envelope> 
    </xsl:template> 
</xsl:stylesheet> 

Я переместил xmlns:ser внутри <soapenv:Envelope> от <xsl:stylesheet> узла, а также создан отдельный псевдоним xmlns:ser1 для существующего URL. Это гарантирует, что используемые пространства имен станут атрибутами родительского узла. Выходной преобразованный XML выглядит следующим образом.

<soapenv:Envelope 
    xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer" 
    xmlns:ser1="http://bre-sc/ServiceOrderToTechnicalOrderTransformer" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <ser:ServiceOrderToTechnicalOrderTransformerRequest> 
      <OrderInput> 
       <Recipient>?</Recipient> 
       <PortInFlag>?</PortInFlag> 
       <Donor>?</Donor> 
       <FMCFirstCompleteFlag>?</FMCFirstCompleteFlag> 
       <CreatedOn>?</CreatedOn> 
       <ACSBillingAccountIntegId>?</ACSBillingAccountIntegId> 
       <OrderType>?</OrderType> 
       <OrderReason>?</OrderReason> 
       <CustomerFirstName>?</CustomerFirstName> 
       <CustomerName>?</CustomerName> 
       <AgreementNum>?</AgreementNum> 
       <AgreedbyOwner>?</AgreedbyOwner> 
       <OriginalReceived>?</OriginalReceived> 
       <AgreementSignDate>?</AgreementSignDate> 
       <BusinessContactFirstName>?</BusinessContactFirstName> 
       <BusinessContactLastName>?</BusinessContactLastName> 
       <UserID>?</UserID> 
       <FMCMNPRequestId>?</FMCMNPRequestId> 
       <LegalContactFirstName>?</LegalContactFirstName> 
       <LegalContactLastName>?</LegalContactLastName> 
       <CreatedBy>?</CreatedBy> 
       <Comments>?</Comments> 
       <IntegrationID>?</IntegrationID> 
       <OrderId>?</OrderId> 
       <ReferenceOrder>?</ReferenceOrder> 
       <Status>?</Status> 
       <OrderTypeProvisioningRelevant>?</OrderTypeProvisioningRelevant> 
       <TriggerScript>?</TriggerScript> 
       <OrderSource>?</OrderSource> 
       <CustomerSegment>?</CustomerSegment> 
       <CustomerSubsegment>?</CustomerSubsegment> 
       <CustomerIdNumber>?</CustomerIdNumber> 
       <CustomerIdType>?</CustomerIdType> 
       <Priority>?</Priority> 
       <CustomerCode>?</CustomerCode> 
       <Urgent>?</Urgent> 
       <SalesPersonEmail>?</SalesPersonEmail> 
       <NotificationPhoneNumber>?</NotificationPhoneNumber> 
       <NotificationEmail>?</NotificationEmail> 
       <ASAP>?</ASAP> 
       <CustomerNotificationChannel>?</CustomerNotificationChannel> 
       <OrderCreatorEmail>?</OrderCreatorEmail> 
       <PrevCustomerRef>?</PrevCustomerRef> 
       <VIPFlag>?</VIPFlag> 
      </OrderInput> 
     </ser:ServiceOrderToTechnicalOrderTransformerRequest> 
    </soapenv:Body> 
</soapenv:Envelope>