我花了很多时间在谷歌上搜索,但没有找到答案或解决方案。在 XSLT 2 中,可以将变量强制转换为节点集。所以像这样的工作。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="var" as="element()">
<element><subelement>A</subelement><subelement>B</subelement></element>
</xsl:variable>
<xsl:template match="/">
<xsl:copy-of select="$var/subelement[1]" />-->
</xsl:template>
</xsl:stylesheet>
输出是
<?xml version="1.0" encoding="UTF-8"?>
<subelement>A</subelement>
但是当我尝试这个
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="par" />
<xsl:template match="/">
<xsl:copy-of select="$par/subelement[1]" />
</xsl:template>
</xsl:stylesheet>
并将值<element><subelement>A</subelement><subelement>B</subelement></element>
作为参数“par”传递给 XSLT 处理器(Saxon,Altova),然后出现错误:
Error in XPath 2.0 expression
Type error XPTY0004: Expected a node - current item is '<element><subelement>A</subelement><subelement>B</subelement></element>' of type xs:string
好的,我可以没有它,但我只是想知道为什么 xsl:variable 和 xsl:param 在这方面表现不同。