指定xslt的输出格式



我知道这是问之前,但我找不到一个简单的例子。只是想改变输出格式。我现有的XSLT是这样的,但输出格式始终是。txt。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> 
<xsl:text>*,</xsl:text>
<xsl:value-of select="//AccountFields/AccountID"/>
<xsl:text>&#13;&#10;</xsl:text>
<xsl:for-each select="//TransactionLine">
<xsl:variable name="i" select="position()" />
<xsl:value-of select="//AccountFields/AccountID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ItemFields/ItemID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="TransactionLineFields/UnitQuantity"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="TransactionLineFields/UnitPrice"/>
<xsl:text>&#13;&#10;</xsl:text>
</xsl:for-each> 
</xsl:template>
</xsl:stylesheet>

我尝试添加<xsl:result-document href="Order.csv" method="text">,但文件无法完全生成,我使用的工具没有给我一个清晰的方法来查看错误。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:result-document href="Order.csv" method="text">
<xsl:text>*,</xsl:text>
<xsl:value-of select="//AccountFields/AccountID"/>
<xsl:text>&#13;&#10;</xsl:text>
<xsl:for-each select="//TransactionLine">
<xsl:variable name="i" select="position()" />
<xsl:value-of select="//AccountFields/AccountID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ItemFields/ItemID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="TransactionLineFields/UnitQuantity"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="TransactionLineFields/UnitPrice"/>
<xsl:text>&#13;&#10;</xsl:text>
</xsl:for-each>
</xsl:result-element>
</xsl:template>
</xsl:stylesheet>

xsl:result-document仅在XSLT 2.0及更高版本中可用。

如果可以使用XSLT-2.0,则可以传递参数并将method属性与属性值模板设置为

"xml"|"html"|"xhtml"|"text"|"json"|"adaptive"| eqname

这里,文件扩展名和输出方法由传递给样式表的参数动态设置:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="fileExt" select="'.csv'" />
<xsl:param name="fileMethod" select="'xml'" />
<xsl:template match="/">
<xsl:result-document href="{concat('Order',$fileExt)}" method="{$fileMethod}">
<xsl:text>*,</xsl:text>
...
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>

它已经被Saxon测试过了。
如果您想更改xsl:output方法,请查看此问题。

最新更新