我对XSLT很陌生,而且我很难理解一些代码。以下是我不明白的代码:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
和
<xsl:if test="*">
测试*符号时意味着什么?
答案 0 :(得分:2)
第一个模板是identity transform的基础,通常用作&#34;推送风格的基础&#34;样式表,其默认行为是简单地将输入复制到输出中。添加了更具体的模板,以便自定义行为并生成不同的内容。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
此模板将匹配任何属性@*
和任何节点(元素,注释,文字或处理说明)node()
,并且是:*|comment()|text()|processing-instruction()
当匹配任何项目时,模板首先复制匹配的项目,然后为上下文项目的任何属性或xsl:apply-templates
子项调用node()
。对于属性text()
,comment()
或processing-instruction()
,将没有属性或子node()
。对于一个元素,它可以匹配其中任何一个。除非有更具体的模板,否则它只会与此模板匹配并复制匹配的项目并继续处理其属性和子项(如果有)。
如果是xsl:if
:
<xsl:if test="*">
测试是否有任何子元素(相对于上下文节点)。如果有,则满足条件,并且测试评估为true()
,并且将应用if中的任何内容。
有关缩写语法的详细信息,请参阅规范: https://www.w3.org/TR/xpath/#path-abbrev