Używam XML do przechowywania małej listy kontaktów i próby napisania szablonu XSL, który przekształci go w plik CSV. Problem, który mam, dotyczy białych znaków na wyjściu.XSLT - usuń białe znaki z szablonu
Wyjście:
Friend, John, Smith, Home,
123 test,
Sebastopol,
California,
12345,
Home 1-800-123-4567, Personal [email protected]
mam wcięty rozstawione zarówno plik/źródło XML i związane z szablonu XSL, aby łatwiej było czytać i rozwijać, ale to wszystko extra białe miejsca jest coraz się do wyjścia . Sam XML nie ma dodatkowych białych znaków wewnątrz węzłów, poza nimi po to, by formatować, i to samo dotyczy XSLT.
Aby plik CSV był ważny, każdy wpis musi znajdować się we własnej linii, a nie w podziale. Poza usunięciem wszystkich dodatkowych białych znaków z XML i XSLT (co czyni je tylko jedną długą linią kodu), czy istnieje inny sposób na pozbycie się białych znaków na wyjściu?
Edit: Oto mała próbka 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>
A oto 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>
Dlaczego używasz 'disable-output-escaping' na każdym' '? Nie potrzebujesz tego dla ''. Od specyfikacji XSLT 1.0: "Metoda wyjścia tekstowego ignoruje atrybut disable-output-escaping, ponieważ nie wykonuje żadnego wyprowadzania wyjścia." –