2012-04-02 5 views
-1

Ich bin neu XSLT, kann jede Stelle vorschlägt genauen XSLT-Code follwing tranformation ::: Multi hierarchische XML-Datei Unten finden ::Multi hierarchische Ebene XML to Flat XML XSLT mit

<ROOT> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two A</TAG2> 
     <TAG2> Two B</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four A</TAG4> 
     <TAG4> Four B</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two A</TAG2> 
     <TAG2> Two B</TAG2> 
     <TAG2> Two C</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four A</TAG4> 
     <TAG4> Four B</TAG4> 
     <TAG4> Four C</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
</ROOT> 

I wnat oben zu konvertieren zu wie folgt ::

<ROOT> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two A</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four A</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1>  
     <TAG2> Two B</TAG2> 
     <TAG3> Three</TAG3>  
     <TAG4> Four B</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two A</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four A</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two B</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four B</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two C</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four C</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
    <RECORD> 
     <TAG1> One </TAG1> 
     <TAG2> Two</TAG2> 
     <TAG3> Three</TAG3> 
     <TAG4> Four</TAG4> 
     <TAG5> Five </TAG5> 
    </RECORD> 
</ROOT> 

Kann irgendein Körper XSLT-Code dafür vorschlagen ?? Danke.

+0

Es ist überhaupt nicht klar, welche Regeln Sie in Ihrer Umwandlung verwenden. Wie bestimmen Sie das Ausgabeformat von der Eingabe? – ColinE

+0

Tahks für schnelle Antwort, in obigen XML haben wir mehrere Werte für einige Tags wie und. Ich möchte diese Multi (,) Tags in verschiedene Tags mit remarkn (, , ) Tags teilen. Danke –

+0

Ist die gleiche Anzahl von TAG2 wie die Anzahl von TAG4 in jedem Datensatz? TAG2 & TAG4 sind die einzigen Multi-Werte-Tags? – Erlock

Antwort

0

In diesem Fall ist eine benannte Vorlage (Funktion) obligatorisch.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:template name="addRecord"> 
     <xsl:param name="rank" select="1" /> 
     <xsl:param name="numberOfRecords" /> 
     <xsl:if test="$rank &lt;= $numberOfRecords"> 
      <RECORD> 
       <xsl:copy-of select="TAG1" /> 
       <xsl:copy-of select="TAG2[$rank]" /> 
       <xsl:copy-of select="TAG3" /> 
       <xsl:copy-of select="TAG4[$rank]" /> 
       <xsl:copy-of select="TAG5" /> 
      </RECORD> 
      <xsl:call-template name="addRecord"> 
       <xsl:with-param name="rank" select="$rank + 1" /> 
       <xsl:with-param name="numberOfRecords" select="$numberOfRecords" /> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
    <xsl:template match="ROOT"> 
     <xsl:copy> 
      <xsl:apply-templates select="RECORD" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="RECORD"> 
     <xsl:call-template name="addRecord"> 
      <xsl:with-param name="numberOfRecords"> 
       <xsl:choose> 
        <xsl:when test="count(TAG2) &gt; count(TAG4)"> 
         <xsl:value-of select="count(TAG2)" /> 
        </xsl:when> 
        <xsl:otherwise> 
         <xsl:value-of select="count(TAG4)" />     
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:with-param> 
     </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Danke. es funktioniert gut –

+0

Also vergessen Sie nicht, Ihre Frage als beantwortet zu markieren. :) – Erlock

+0

Noch ein Zweifel, wenn die Anzahl der und sind nicht gleich dann wie kann ich erreichen, dass ?? –