使用 xslt 将 XML 转换为 TXT
Transforming XML to TXT using xslt
xslt 转换后,TXT 文件中的文本格式出现问题。
这是我的 XML 文件的示例。
<książka id="k3">
<tytuł> "Ogniem i Mieczem" </tytuł>
<autor> Henryk Sienkiewicz </autor>
<rokWydania> 1884 </rokWydania>
<wydawnictwo> Świat Książki </wydawnictwo>
<gatunek>Powieść</gatunek>
<liczbaStron> 758 </liczbaStron>
<cena>40.99 PLN</cena>
<waluta> PLN </waluta>
</książka>
要转换它,我正在使用此模板:
<xsl:template match="książka">
<xsl:text>
</xsl:text>
<xsl:text>KSIĄŻKA:
</xsl:text>
<xsl:text>TYTUŁ:	</xsl:text>
<xsl:value-of select="concat('	',tytuł)" />
<xsl:text>
</xsl:text>
<xsl:text>AUTOR: 	</xsl:text>
<xsl:value-of select="concat('		',autor)" />
<xsl:text>
</xsl:text>
<xsl:text>ROK WYDANIA: 	</xsl:text>
<xsl:value-of select="concat('	',rokWydania)" />
<xsl:text>
</xsl:text>
<xsl:text>WYDAWNICTWO: 	</xsl:text>
<xsl:value-of select="concat('	',wydawnictwo)" />
<xsl:text>
</xsl:text>
<xsl:text>GATUNEK: 	</xsl:text>
<xsl:value-of select="concat('	',gatunek)" />
<xsl:text>
</xsl:text>
<xsl:text>LICZBA STRON: 	</xsl:text>
<xsl:value-of select="concat('		',liczbaStron)" />
<xsl:text>
</xsl:text>
<xsl:text>CENA: 	</xsl:text>
<xsl:value-of select="concat('	',cena)" />
<xsl:text>
</xsl:text>
我在 txt 文件中的输出与预期的一样不规则。
KSIĄŻKA:
TYTUŁ: "Mały Książe"
AUTOR: Antoine de Saint-Exupéry
ROK WYDANIA: 1943
WYDAWNICTWO: Zielona Sowa
GATUNEK: Nowela
LICZBA STRON: 62
CENA: 4.99 USD
我只想要正确的数据列。我尝试使用 concat 和子字符串函数或添加变量 $spaceCount 来完成它,但无法获得预期结果。
关于如何解决这个问题的任何提示?
这是一个在命名模板中使用 substring()
的选项...
XML 输入
<książka id="k3">
<tytuł> "Ogniem i Mieczem" </tytuł>
<autor> Henryk Sienkiewicz </autor>
<rokWydania> 1884 </rokWydania>
<wydawnictwo> Świat Książki </wydawnictwo>
<gatunek>Powieść</gatunek>
<liczbaStron> 758 </liczbaStron>
<cena>40.99 PLN</cena>
<waluta> PLN </waluta>
</książka>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="książka">
<xsl:text>
</xsl:text>
<xsl:text>KSIĄŻKA:
</xsl:text>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'TYTUŁ:'"/>
<xsl:with-param name="value" select="normalize-space(tytuł)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'AUTOR:'"/>
<xsl:with-param name="value" select="normalize-space(autor)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'ROK WYDANIA:'"/>
<xsl:with-param name="value" select="normalize-space(rokWydania)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'WYDAWNICTWO:'"/>
<xsl:with-param name="value" select="normalize-space(wydawnictwo)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'GATUNEK:'"/>
<xsl:with-param name="value" select="normalize-space(gatunek)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'LICZBA STRON:'"/>
<xsl:with-param name="value" select="normalize-space(liczbaStron)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'CENA:'"/>
<xsl:with-param name="value" select="normalize-space(cena)"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="pad">
<xsl:param name="label"/>
<xsl:param name="value"/>
<xsl:variable name="padding"
select="' '"/>
<xsl:value-of select="concat($label,
substring($padding,string-length($label) + string-length($value)),
$value,'
')"/>
</xsl:template>
</xsl:stylesheet>
输出
KSIĄŻKA:
TYTUŁ: "Ogniem i Mieczem"
AUTOR: Henryk Sienkiewicz
ROK WYDANIA: 1884
WYDAWNICTWO: Świat Książki
GATUNEK: Powieść
LICZBA STRON: 758
CENA: 40.99 PLN
xslt 转换后,TXT 文件中的文本格式出现问题。 这是我的 XML 文件的示例。
<książka id="k3">
<tytuł> "Ogniem i Mieczem" </tytuł>
<autor> Henryk Sienkiewicz </autor>
<rokWydania> 1884 </rokWydania>
<wydawnictwo> Świat Książki </wydawnictwo>
<gatunek>Powieść</gatunek>
<liczbaStron> 758 </liczbaStron>
<cena>40.99 PLN</cena>
<waluta> PLN </waluta>
</książka>
要转换它,我正在使用此模板:
<xsl:template match="książka">
<xsl:text>
</xsl:text>
<xsl:text>KSIĄŻKA:
</xsl:text>
<xsl:text>TYTUŁ:	</xsl:text>
<xsl:value-of select="concat('	',tytuł)" />
<xsl:text>
</xsl:text>
<xsl:text>AUTOR: 	</xsl:text>
<xsl:value-of select="concat('		',autor)" />
<xsl:text>
</xsl:text>
<xsl:text>ROK WYDANIA: 	</xsl:text>
<xsl:value-of select="concat('	',rokWydania)" />
<xsl:text>
</xsl:text>
<xsl:text>WYDAWNICTWO: 	</xsl:text>
<xsl:value-of select="concat('	',wydawnictwo)" />
<xsl:text>
</xsl:text>
<xsl:text>GATUNEK: 	</xsl:text>
<xsl:value-of select="concat('	',gatunek)" />
<xsl:text>
</xsl:text>
<xsl:text>LICZBA STRON: 	</xsl:text>
<xsl:value-of select="concat('		',liczbaStron)" />
<xsl:text>
</xsl:text>
<xsl:text>CENA: 	</xsl:text>
<xsl:value-of select="concat('	',cena)" />
<xsl:text>
</xsl:text>
我在 txt 文件中的输出与预期的一样不规则。
KSIĄŻKA:
TYTUŁ: "Mały Książe"
AUTOR: Antoine de Saint-Exupéry
ROK WYDANIA: 1943
WYDAWNICTWO: Zielona Sowa
GATUNEK: Nowela
LICZBA STRON: 62
CENA: 4.99 USD
我只想要正确的数据列。我尝试使用 concat 和子字符串函数或添加变量 $spaceCount 来完成它,但无法获得预期结果。
关于如何解决这个问题的任何提示?
这是一个在命名模板中使用 substring()
的选项...
XML 输入
<książka id="k3">
<tytuł> "Ogniem i Mieczem" </tytuł>
<autor> Henryk Sienkiewicz </autor>
<rokWydania> 1884 </rokWydania>
<wydawnictwo> Świat Książki </wydawnictwo>
<gatunek>Powieść</gatunek>
<liczbaStron> 758 </liczbaStron>
<cena>40.99 PLN</cena>
<waluta> PLN </waluta>
</książka>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="książka">
<xsl:text>
</xsl:text>
<xsl:text>KSIĄŻKA:
</xsl:text>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'TYTUŁ:'"/>
<xsl:with-param name="value" select="normalize-space(tytuł)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'AUTOR:'"/>
<xsl:with-param name="value" select="normalize-space(autor)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'ROK WYDANIA:'"/>
<xsl:with-param name="value" select="normalize-space(rokWydania)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'WYDAWNICTWO:'"/>
<xsl:with-param name="value" select="normalize-space(wydawnictwo)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'GATUNEK:'"/>
<xsl:with-param name="value" select="normalize-space(gatunek)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'LICZBA STRON:'"/>
<xsl:with-param name="value" select="normalize-space(liczbaStron)"/>
</xsl:call-template>
<xsl:call-template name="pad">
<xsl:with-param name="label" select="'CENA:'"/>
<xsl:with-param name="value" select="normalize-space(cena)"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="pad">
<xsl:param name="label"/>
<xsl:param name="value"/>
<xsl:variable name="padding"
select="' '"/>
<xsl:value-of select="concat($label,
substring($padding,string-length($label) + string-length($value)),
$value,'
')"/>
</xsl:template>
</xsl:stylesheet>
输出
KSIĄŻKA:
TYTUŁ: "Ogniem i Mieczem"
AUTOR: Henryk Sienkiewicz
ROK WYDANIA: 1884
WYDAWNICTWO: Świat Książki
GATUNEK: Powieść
LICZBA STRON: 758
CENA: 40.99 PLN