假设我的xsl中有一个随机模板:
<xsl:template name="keywords">
<test>
<foo>bar</foo>
<bar>foo</bar>
</test>
<test>
<foo>foobar</foo>
<bar>barfoo</bar>
</test>
<xsl:template>
我想输出让我们说只有第一个节点集。有一种优雅的方式来做到这一点? 如果节点不在源xml中,但如果是调用模板的结果,我该如何匹配节点?
谢谢!
答案 0 :(得分:1)
如果将模板调用的结果保存在变量中,则可以使用XPath
提取部分模板<xsl:variable name="result">
<xsl:call-template name="keywords"/>
</xsl:variable>
<xsl:sequence select="$keywords/test[1]" />
答案 1 :(得分:1)
您可以使用Xpath表达式访问命名模板中的节点,如:
document('')/xsl:stylesheet/xsl:template[@name='keywords']/test[1]
<强>加强>:
例如,以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<output>
<xsl:copy-of select="document('')/xsl:stylesheet/xsl:template[@name='keywords']/test[1]"/>
</output>
</xsl:template>
<xsl:template name="keywords">
<test>
<foo>bar</foo>
<bar>foo</bar>
</test>
<test>
<foo>foobar</foo>
<bar>barfoo</bar>
</test>
</xsl:template>
</xsl:stylesheet>
当应用于任何格式良好的XML输入时,将返回:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<test xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<foo>bar</foo>
<bar>foo</bar>
</test>
</output>
注意:您可以通过应用模板而不是深度复制来摆脱(无害的)冗余命名空间声明。