XML和XSLT将输出写入文本文件

我试图在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>的孩子或< 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将输出写入文本文件 - 代码日志