xslt字符串参数未显示

时间:2016-03-16 10:46:48

标签: xslt

我有以下a.html文件:

<html>
  <body>
    <div class="a">aaa
      <div class="b">bbb</div>
      <div class="c">ccc
        <div class="d">ddd</div>
      </div>
    </div>
  </body>
</html>

我正在使用以下bash脚本:

#!/bin/bash
pid="a"
yyy=123
xsltproc --param pid ${pid} --param yyy ${yyy} ${pid}.xslt ${pid}.html > ${pid}_${yyy}.html

一个参数是整数,另一个是字符串。

我的a.xslt文件试图在html结构中插入两个参数,如下所示:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pid"/>
 <xsl:param name="yyy"/>

 <xsl:template match="@* | node()">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="div[@class='a']">
  <xsl:copy>
   <xsl:apply-templates select="@* | text()" />
   <div class="pid"><xsl:value-of select="$pid"/></div>
   <div class="yyy"><xsl:value-of select="$yyy"/></div>
   <xsl:apply-templates select="node()" />
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

我的输出a_123.html如下:

<html>
  <body>
    <div class="a">aaa
      <div class="pid"></div>
      <div class="yyy">123</div>aaa
      <div class="b">bbb</div>
      <div class="c">ccc1
        <div class="d">ddd11</div>
      </div>
    </div>
  </body>
</html>

这包含2个错误:

  1. aaa在div class =&#34; yyy&#34;
  2. 之后再次出现
  3. div class =&#34; pid&#34;不包含字符串参数的值
  4. 我做错了什么?

1 个答案:

答案 0 :(得分:3)

<xsl:apply-templates select="node()" />更改为<xsl:apply-templates select="*"/>,仅处理那里的元素节点而不是所有子节点(包括文本节点),因为您之前已经输出了它们。

至于参数,我不熟悉bash,尝试xsltproc --param pid '${pid}' ...,让XPath表达式构造一个字符串值作为参数,或者使用--stringparam pid ${pid}作为参数。