Sto utilizzando XML per memorizzare un piccolo elenco di contatti e sto provando a scrivere un modello XSL che lo trasformerà in un file CSV. Il problema che sto avendo riguarda gli spazi bianchi nell'output.XSLT - rimuove spazi bianchi dal modello
L'output:
Friend, John, Smith, Home,
123 test,
Sebastopol,
California,
12345,
Home 1-800-123-4567, Personal [email protected]
ho frastagliata distanziati sia il file/XML di origine e il modello XSL associato per rendere più facile la lettura e lo sviluppo, ma tutto ciò che lo spazio vuoto supplementare si sta ottenendo in uscita . Lo stesso XML non ha spazi bianchi extra all'interno dei nodi, solo al di fuori di essi per la formattazione, e lo stesso vale per l'XSLT.
Affinché il file CSV sia valido, ogni voce deve essere sulla propria linea, non suddivisa. Oltre a rimuovere tutto lo spazio bianco extra da XML e XSLT (rendendoli solo una lunga riga di codice), c'è un altro modo per sbarazzarsi degli spazi bianchi nell'output?
Edit: Ecco un piccolo esempio XML:
<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>
Ed ecco il 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>
Perché usi 'disable-output-escaping' su ogni' '? Non è necessario per ''. Dalla specifica XSLT 1.0: "Il metodo di output del testo ignora l'attributo disable-output-escaping, poiché non esegue alcun escape di output." –