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

标签 xml xslt output

我正在尝试在 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/

相关文章:

java - 在java中解析xml字符串时出现问题

java - 生成 XML 时如何在 CDATA 中保留换行符?

xml - 使用 XSL 按 RFC-822 日期格式对 XML 进行排序

java - 使用 PrintWriter 写入文件结果不正确

c - 用 C 编写一个二维数组表。我将如何着手这样做。关于整洁度(例如分割线)

c - 对变量和常量的操作在c中给出不同的结果

c# - TextBox 中不显示换行符

xml - namespace URI 中尾部斜线的意义是什么?

Java Transformer 如何忽略 namespace

php - 如何将字符串与 Xpath 1.0 进行比较?