Ich verwende XML, um eine kleine Kontaktliste zu speichern und versuche, eine XSL-Vorlage zu schreiben, die sie in eine CSV-Datei umwandeln wird. Das Problem, das ich habe, ist mit Leerzeichen in der Ausgabe.XSLT - Entfernen von Leerzeichen aus der Vorlage
Der Ausgang:
Friend, John, Smith, Home,
123 test,
Sebastopol,
California,
12345,
Home 1-800-123-4567, Personal [email protected]
Ich habe eingekerbten/Abstand sowohl die Quelle als XML-Datei und die zugehörige XSL-Vorlage, um es einfacher zu lesen und zu entwickeln, aber alle, dass zusätzliche Leerraum wird sich in den Ausgang bekommen . Der XML-Code selbst enthält keine zusätzlichen Leerzeichen in den Knoten, die direkt außerhalb der Knoten für die Formatierung liegen. Dies gilt auch für XSLT.
Damit die CSV-Datei gültig ist, muss jeder Eintrag in einer eigenen Zeile stehen und nicht unterbrochen sein. Abgesehen davon, dass der gesamte zusätzliche Leerraum aus XML und XSLT entfernt wird (was nur eine lange Codezeile darstellt), gibt es eine andere Möglichkeit, den Leerraum in der Ausgabe loszuwerden?
Edit: Hier ist ein kleines XML-Beispiel:
<PHONEBOOK>
<LISTING>
<FIRST>John</FIRST>
<LAST>Smith</LAST>
<ADDRESS TYPE="Home">
<STREET>123 test</STREET>
<CITY>Sebastopol</CITY>
<STATE>California</STATE>
<ZIP>12345</ZIP>
</ADDRESS>
<PHONE>1-800-123-4567</PHONE>
<EMAIL>[email protected]</EMAIL>
<RELATION>Friend</RELATION>
</LISTING>
</PHONEBOOK>
Und hier ist die XSLT:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="//LISTING">
<xsl:value-of select="RELATION" /><xsl:text>, </xsl:text>
<xsl:value-of select="FIRST" /><xsl:text>, </xsl:text>
<xsl:value-of select="LAST" /><xsl:text>, </xsl:text>
<xsl:if test="ADDRESS">
<xsl:for-each select="ADDRESS">
<xsl:choose>
<xsl:when test="@TYPE">
<xsl:value-of select="@TYPE" />,
</xsl:when>
<xsl:otherwise>
<xsl:text>Home </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="STREET" />,
<xsl:value-of select="CITY" />,
<xsl:value-of select="STATE" />,
<xsl:value-of select="ZIP" />,
</xsl:for-each>
</xsl:if>
<xsl:for-each select="PHONE">
<xsl:choose>
<xsl:when test="@TYPE">
<xsl:value-of select="@TYPE" />
</xsl:when>
<xsl:otherwise><xsl:text>Home </xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:value-of select="." /><xsl:text >, </xsl:text>
</xsl:for-each>
<xsl:if test="EMAIL">
<xsl:for-each select="EMAIL">
<xsl:choose>
<xsl:when test="@TYPE">
<xsl:value-of select="@TYPE" /><xsl:text > </xsl:text>
</xsl:when>
<xsl:otherwise><xsl:text >Personal </xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:value-of select="." /><xsl:text >, </xsl:text>
</xsl:for-each>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Warum verwenden Sie 'disable-output-escaping' auf jedem' '? Sie brauchen das nicht für ''. Aus XSLT 1.0-Spezifikation: "Die Textausgabemethode ignoriert das Attribut disable-output-escaping, da kein Ausgabe-Escaping ausgeführt wird." –