这是目的<xsl:namespace-alias>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xslout="urn:dummy"
exclude-result-prefixes="xslout">
<xsl:namespace-alias stylesheet-prefix="xslout" result-prefix="xsl" />
<xsl:output method="xml" indent="yes"/>
<!-- ... -->
<xsl:template match="select">
<xslout:value-of select="{@valueXpath}" />
<xsl:template>
</xsl:stylesheet>
在这里,xslout:
样式表中的任何元素都将成为xsl:
输出,并且此类元素中的任何属性值模板都将由该样式表处理(因此在上面的 a<select valueXpath="@foo" />
中将生成一个<xsl:value-of select="@foo" />
作为输出)。如果要在输出中放置 AVT,则必须将大括号加倍
<xslout:element name="{{@elementName}}" />
如果您已经有大量<xsl:...>
不想重写的东西,那么您可以使用不同的前缀,例如
<?xml version="1.0" encoding="utf-8"?>
<sty:stylesheet xmlns:sty="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xsl="urn:dummy"
exclude-result-prefixes="xsl">
<sty:namespace-alias stylesheet-prefix="xsl" result-prefix="sty" />
<sty:template match="select">
<xsl:value-of select="{@valueXpath}" />
<sty:template>
尽管关于 AVT 的注释仍然有效。
如果您只想将 XSLT 代码块select
逐字复制到元素中(而不是根据select
元素的内容生成它),一个可能更简单的替代方法是将 XSLT 代码放在另一个文件中并使用该document
函数
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="select">
<xsl:copy-of select="document('to-insert.xml')/*/node()" />
<xsl:template>
</xsl:stylesheet>
其中to-insert.xml
包含类似的东西
<data xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:for-each select="*">
<!-- ... -->
</xsl:for-each>
</data>