2012-04-06 3 views
1

Ich habe die folgende XML ein:Xslt copy-of select IF Bedingung wahr ist

<?xml version="1.0" encoding="utf-16"?> 
<form> 
    <answers> 
    <moz_generiek>Hello World</moz_generiek> 
    <moz_opdracht>Mission 1</moz_opdracht> 
    <moz_opdracht2>Mission 2</moz_opdracht2> 
    <moz_opdracht3>Mission 3</moz_opdracht3> 
    <moz_opdracht4>Mission 4</moz_opdracht4> 
    <moz_opdracht5>Mission 5</moz_opdracht5> 
    <moz_opdracht6>Mission 6</moz_opdracht6> 
    <moz_opdracht7>Mission 7</moz_opdracht7> 
    <moz_opdracht8>Mission 8</moz_opdracht8> 
    <moz_opdracht9>Mission 9</moz_opdracht9> 
    <set_kenmerk_api> 
     <moz_opdracht id="1">SubMission1</moz_opdracht> 
     <moz_opdracht id="2">SubMission2</moz_opdracht> 
     <moz_opdracht id="3">SubMission3</moz_opdracht> 
     <moz_opdracht id="4">SubMission4</moz_opdracht> 
     <moz_opdracht id="5">SubMission5</moz_opdracht> 
    </set_kenmerk_api> 
    </answers> 
</form> 

ich diesen XSLT-Stylesheet verwenden:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

     <xsl:template match="/"> 
     <moz_koppelverzoek> 
      <moz_koppelverzoekreferentie><![CDATA[Important]]></moz_koppelverzoekreferentie> 
      <xsl:apply-templates select="/form/answers/moz_generiek"/> 
      <moz_opdrachten> 
      <xsl:apply-templates select="/form/answers/moz_opdracht"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht2"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht3"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht4"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht5"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht6"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht7"/> 
      <xsl:apply-templates select="/form/answers/set_kenmerk_api/moz_opdracht"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht8"/> 
      <xsl:apply-templates select="/form/answers/moz_opdracht9"/> 
      </moz_opdrachten> 
     </moz_koppelverzoek> 
     </xsl:template> 

     <xsl:template match="moz_generiek"> 
     <xsl:element name="moz_generiek"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

     <xsl:template match="moz_opdracht"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht2"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht3"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht4"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht5"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht6"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht7"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

     <xsl:template match="moz_opdracht"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht8"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

      <xsl:template match="moz_opdracht9"> 
     <xsl:element name="moz_opdracht"> 
     <xsl:copy-of select="node()"/> 
    </xsl:element> 
     </xsl:template> 

</xsl:stylesheet> 

das folgende Ergebnis zu erstellen:

<moz_koppelverzoek> 
    <moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie> 
    <moz_generiek>Hello World</moz_generiek> 
    <moz_opdrachten> 
     <moz_opdracht>Mission 1</moz_opdracht> 
     <moz_opdracht>Mission 2</moz_opdracht> 
     <moz_opdracht>Mission 3</moz_opdracht> 
     <moz_opdracht>Mission 4</moz_opdracht> 
     <moz_opdracht>Mission 5</moz_opdracht> 
     <moz_opdracht>Mission 6</moz_opdracht> 
     <moz_opdracht>Mission 7</moz_opdracht> 
     <moz_opdracht>SubMission1</moz_opdracht> 
     <moz_opdracht>SubMission2</moz_opdracht> 
     <moz_opdracht>SubMission3</moz_opdracht> 
     <moz_opdracht>SubMission4</moz_opdracht> 
     <moz_opdracht>SubMission5</moz_opdracht> 
     <moz_opdracht>Mission 8</moz_opdracht> 
     <moz_opdracht>Mission 9</moz_opdracht> 
    </moz_opdrachten> 
</moz_koppelverzoek> 

Was ich jetzt brauche, ist, dass ich alle Einsendungen unter Mission 9 IF kopieren möchte. Mission 8 Knoten ist im Original XML.

Manchmal sind die Zeile: <moz_opdracht8>Mission 8</moz_opdracht8> und 9 in der ursprünglichen XML und manchmal sind sie nicht.

Wie bekomme ich das folgende Ergebnis XML IF <moz_opdracht8> im XML mit einer IF-Anweisung ist

<moz_koppelverzoek> 
    <moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie> 
    <moz_generiek>Hello World</moz_generiek> 
    <moz_opdrachten> 
     <moz_opdracht>Mission 1</moz_opdracht> 
     <moz_opdracht>Mission 2</moz_opdracht> 
     <moz_opdracht>Mission 3</moz_opdracht> 
     <moz_opdracht>Mission 4</moz_opdracht> 
     <moz_opdracht>Mission 5</moz_opdracht> 
     <moz_opdracht>Mission 6</moz_opdracht> 
     <moz_opdracht>Mission 7</moz_opdracht> 
     <moz_opdracht>SubMission1</moz_opdracht> 
     <moz_opdracht>SubMission2</moz_opdracht> 
     <moz_opdracht>SubMission3</moz_opdracht> 
     <moz_opdracht>SubMission4</moz_opdracht> 
     <moz_opdracht>SubMission5</moz_opdracht> 
     <moz_opdracht>Mission 8</moz_opdracht> 
     <moz_opdracht>Mission 9</moz_opdracht> 
     <moz_opdracht>SubMission1</moz_opdracht> 
     <moz_opdracht>SubMission2</moz_opdracht> 
     <moz_opdracht>SubMission3</moz_opdracht> 
     <moz_opdracht>SubMission4</moz_opdracht> 
     <moz_opdracht>SubMission5</moz_opdracht> 
    </moz_opdrachten> 
</moz_koppelverzoek> 

Antwort

1

Sie könnten auch einen anderen Ansatz für die gesamte Transformation verwenden:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="form"> 
    <moz_koppelverzoek> 
     <moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie> 
     <xsl:apply-templates select="answers/moz_generiek"/> 
     <moz_opdrachten> 
     <xsl:apply-templates select="answers/*[not(name()='moz_generiek')]"/> 
     </moz_opdrachten>  
    </moz_koppelverzoek> 
    </xsl:template> 

    <xsl:template match="answers"> 
    <xsl:apply-templates/> 
    </xsl:template> 

    <xsl:template match="set_kenmerk_api"/> 

    <xsl:template match="*[name() = 'moz_opdracht9' and /*/*/moz_opdracht8]" priority="1"> 
    <xsl:call-template name="mo"/> 
    <xsl:apply-templates select="../set_kenmerk_api/moz_opdracht"/> 
    </xsl:template> 

    <xsl:template match="*[name() = 'moz_opdracht7']" priority="1"> 
    <xsl:call-template name="mo"/> 
    <xsl:apply-templates select="../set_kenmerk_api/moz_opdracht"/> 
    </xsl:template> 

    <xsl:template match="*[starts-with(name(),'moz_opdracht')]" name="mo"> 
    <moz_opdracht> 
     <xsl:apply-templates/> 
    </moz_opdracht> 
    </xsl:template> 

</xsl:stylesheet> 

Diese Stylesheet meiner Meinung nach vereinfacht.

0

Was ich jetzt brauche, ist ich will wieder kopieren Sie alle Einreichungen unter Mission 9 IF Mission 8 Knoten befindet sich im ursprünglichen XML.

Verwendung:

<xsl:apply-templates select="/form/answers[moz_opdracht8]/moz_opdracht9"/>