我正在尝试在 XSLT 中使用增量。并将输出写入txt文件。 这是我的代码: Xslt代码:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text"/>
<xsl:result-document href="foo.txt" method=text />
<xsl:template match="/">
</xsl:template>
<xsl:template match="/build/build">
<xsl:variable name="buildNumber" select="."/>
<xsl:element name="build">
<xsl:value-of select="$buildNumber + 1"/>
</xsl:element>
</xsl:template>
<xsl:template match="/|@*|node()">
<xsl:value-of select="build/major"/>
<xsl:value-of select="build/minor"/>
<xsl:value-of select="build/build"/>
<xsl:value-of select="build/release"/>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML 代码是:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="E:\Build\genVer.xsl"?>
<build>
<major>1.</major><minor>0.</minor><build>0</build><release>.0</release>
</build>
我尝试使用 <xsl:result-document>
它给出错误提示 <xsl:result-document>
不能是 <xsl:stylesheet>
的 child 或 <xsl:template>
.谢谢
最佳答案
您使用 <xsl:result-document>
的方法是完美的声音。唯一的问题是您的样式表是 XSLT 1,对于 <xsl:result-document>
您需要 XSLT 2。XSLT 作为一种函数式语言与此问题无关。
如有必要,请发布使用 <xsl:result-document>
的 XSLT 代码我会为您解决。
编辑:
在此处对您的代码进行必要的更改。原始代码的一部分,例如 method="text"
表示您希望结果是一个文本文件,而 <xsl:element>
看起来你正在尝试输出一个 XML 文件,所以我为两者编写了代码。如前所述,<xsl:result-document>
需要 XSLT 2。
这将创建一个 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:variable name="foldername" select="concat(/build/major, /build/minor, string(/build/build + 1), build/release)"/>
<xsl:result-document href="{$foldername}/foo.xml" method="xml">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:result-document>
</xsl:template>
<xsl:template match="element()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="/build/build">
<xsl:copy>
<xsl:variable name="buildNumber" select="."/>
<xsl:value-of select="$buildNumber + 1"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这会创建一个文本文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="foldername" select="concat(/build/major, /build/minor, string(/build/build + 1), build/release)"/>
<xsl:result-document href="{$foldername}/foo.txt" method="text">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:template>
<xsl:template match="element()">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/build/build">
<xsl:variable name="buildNumber" select="."/>
<xsl:value-of select="$buildNumber + 1"/>
</xsl:template>
</xsl:stylesheet>
输出文件创建在名称为版本的文件夹中,如您所愿,但请注意该文件夹必须事先存在。
关于XML 和 XSLT 将输出写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706498/