我有以下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个错误:
我做错了什么?
答案 0 :(得分:3)
将<xsl:apply-templates select="node()" />
更改为<xsl:apply-templates select="*"/>
,仅处理那里的元素节点而不是所有子节点(包括文本节点),因为您之前已经输出了它们。
至于参数,我不熟悉bash,尝试xsltproc --param pid '${pid}' ...
,让XPath表达式构造一个字符串值作为参数,或者使用--stringparam pid ${pid}
作为参数。