Michael: XML to CSV

Beitrag lesen

Habs selbst hinbekommen ;)

Es fehlte einfach:

xsl:text&#xD;</xsl:text>
    </xsl:for-each>

in der Anweisung. Die Anweisung lautet nun:

<!-- Neue Datenausgabe -->
    <xsl:for-each select="//POI">
            <xsl:if test="@Sprache">
                    <xsl:value-of select="@Sprache"/>
            </xsl:if>
            <!-- test if child exist -->
            <xsl:if test="*">
                  <xsl:value-of select="$Trenner"/>
            </xsl:if>
            <xsl:for-each select="*">
                <xsl:value-of select="."/>
                <xsl:if test="not(position() = last())">
                    <xsl:value-of select="$Trenner"/>
                </xsl:if>
            </xsl:for-each>
                  xsl:text&#xD;</xsl:text>
    </xsl:for-each>
   </xsl:template>

Danke!!!!

So, hab das mal wie folgt in die XSD eingbaut.

Headerbereich fehlt!

<!--Spaltenköpfe -->
      <xsl:for-each select="/*/*[1]/child::* | /*/*[1]/@*">
              <!-- Feldauszeichnung links -->
        <xsl:call-template name="Feldauszeichnung"/>
        <xsl:value-of select="local-name(.)"/>
        <!-- Feldauszeichnung rechts -->
        <xsl:call-template name="Feldauszeichnung"/>
        <!--Trenner -->
        <xsl:if test="not(position()=last())">
          <xsl:value-of select="$Trenner"/>
        </xsl:if>
      </xsl:for-each>
      xsl:text&#xD;</xsl:text>
    </xsl:if>

<!-- Neue Datenausgabe -->
    <xsl:for-each select="//POI">
            <xsl:if test="@Sprache">
                    <xsl:value-of select="@Sprache"/>
            </xsl:if>
            <!-- test if child exist -->
            <xsl:if test="*">
                  <xsl:value-of select="$Trenner"/>
            </xsl:if>
            <xsl:for-each select="*">
                <xsl:value-of select="."/>
                <xsl:if test="not(position() = last())">
                    <xsl:value-of select="$Trenner"/>
                </xsl:if>
            </xsl:for-each>
    </xsl:for-each>

</xsl:template>

<!-- Feldauszeichnung -->
  <xsl:template name="Feldauszeichnung">
    <xsl:if test="$Feld != ''">
      <xsl:value-of select="$Feld"/>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Nun bekomme ich folgendes raus:

Sprache;Name;Preis;Nr;Typ
DEU;Frühstück;20;1;p;Mittagspause;1;2;p

Anscheinend bekommt er es nun nicht hin, den neuen Eintrag in die nächste Spalte zu setzen. So wie hier:

Sprache;Name;Preis;Nr;Typ
DEU;Frühstück;20;1;p
;Mittagspause;1;2;p

Wie könnte man das lösen?

Danke übrigens für die schnelle Hilfe. Ist Gold wert!

Sorry,

kann man auch nur mit xsl:if

<xsl:for-each select="//POI">
            <xsl:if test="@Sprache">
                    <xsl:value-of select="@Sprache"/>
            </xsl:if>
            <!-- test if child exist -->
            <xsl:if test="*">
                  <xsl:value-of select="$Trenner"/>
            </xsl:if>
            <xsl:for-each select="*">
                <xsl:value-of select="."/>
                <xsl:if test="not(position() = last())">
                    <xsl:value-of select="$Trenner"/>
                </xsl:if>
            </xsl:for-each>
</xsl:for-each>