2017-01-18 1 views
1

Ich habe diese XML und müssen das Format derwie mit XSLT ändern nodename

<?xml version="1.0"?> 
<request type="POST"> 
    <paths count="0"/> 
    <values count="71"> 
     <timestamp>2017-01-18T21:38:22+01:00</timestamp> 
       <CampaignId>7f27a</CampaignId> 
       <CampaignCode>CMP-01084-C5R2J5</CampaignCode> 
     <Apple> 
      <a>Appel</a> 
      <b>Appel</b> 

     </Apple> 
     <Peach> 
      <a>Appel</a> 
      <b>Appel</b> 

     </Peach> 
    </values> 
    <files count="0"/> 
    <header> 
     <ipaddress>127.0.0.1</ipaddress> 
     <reqheader>thankyou</reqheader> 
     <referer/> 
     <![CDATA[Host= localhost:8083]]> 
     <cookies/> 
    </header> 
</request> 

** I nur in <values> und ändern <apple>, die Werte ändern müssen <peach> etc in <value>. So etwas wie dies ..

<soapenv:Envelope> 
     <soapenv:Header/> 
      <soapenv:Body> 
       <timestamp>2017-01-18T21:38:22+01:00</timestamp> 
       <CampaignId>7f27a</CampaignId> 
       <CampaignCode>CMP-01084-C5R2J5</CampaignCode> 
       <value> 
        <a>Appel</a> 
        <b>Appel</b> 
       </value> 
       <value> 
        <a>Appel</a> 
        <b>Appel</b> 
       </value>  
     </soapenv:Body> 
</soapenv:Envelope> 

Es mehr als 8 Stunden ohne Fortschritte gemacht hat.

+0

Hat meine Antwort geholfen? –

Antwort

0

Dies sollte Ihnen den Anfang machen. Weitere Informationen finden Sie in den Kommentaren im XSLT.

Beachten Sie, dass Sie in Ihrer Ausgabe das Namespacepräfix soapenv verwenden. Damit Ihre Ausgabe namespace well-formed lautet, müssen Sie dieses Präfix an einen Namespace-URI binden.

In meinem XSLT habe ich die uri http://schemas.xmlsoap.org/soap/envelope/; Ändern Sie das, wenn Sie müssen.

XML Eingang (feste well-formed (fehlende </values>) werden)

<request type="POST"> 
    <paths count="0"/> 
    <values count="71"> 
     <timestamp>2017-01-18T21:38:22+01:00</timestamp> 
     <CampaignId>7f27a</CampaignId> 
     <CampaignCode>CMP-01084-C5R2J5</CampaignCode> 
     <Apple> 
      <a>Appel</a> 
      <b>Appel</b> 
     </Apple> 
     <Peach> 
      <a>Appel</a> 
      <b>Appel</b> 
     </Peach> 
    </values> 
    <files count="0"/> 
    <header> 
     <ipaddress>127.0.0.1</ipaddress> 
     <reqheader>thankyou</reqheader> 
     <referer/> 
     <![CDATA[Host= localhost:8083]]> 
     <cookies/> 
    </header> 
</request> 

XSLT 1,0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <!--Copy any attribute or node() (element, text, comment, processing 
    instruction) without change. Override this with a more specific template 
    when needed.--> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!--Match the root element "request" and narrow the elements being processed 
    to children of the "values" element.--> 
    <xsl:template match="/request"> 
    <soapenv:Envelope> 
     <soapenv:Header/> 
     <soapenv:Body> 
     <xsl:apply-templates select="values/*"/> 
     </soapenv:Body> 
    </soapenv:Envelope> 
    </xsl:template> 

    <!--Change the name of elements to "value" except for timestamp, 
    CampaignId, and CampaignCode. Those should be left alone.--> 
    <xsl:template match="Apple|Peach"> 
    <value> 
     <xsl:apply-templates/> 
    </value> 
    </xsl:template> 

</xsl:stylesheet> 

Output

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <timestamp>2017-01-18T21:38:22+01:00</timestamp> 
     <CampaignId>7f27a</CampaignId> 
     <CampaignCode>CMP-01084-C5R2J5</CampaignCode> 
     <value> 
     <a>Appel</a> 
     <b>Appel</b> 
     </value> 
     <value> 
     <a>Appel</a> 
     <b>Appel</b> 
     </value> 
    </soapenv:Body> 
</soapenv:Envelope> 

bearbeiten, basierend auf den folgenden Kommentar:

dies hat leider den Namen jedes Knotens ändern, die Childs auf ‚Wert‘, und nicht nur die Targeting diejenigen hat.

Es war nicht zu 100% mir klar, dass Sie nur Apple und Peach (wegen des „etc“) zum Ziel wollten.