我想引用我在 XSLT 文件中定义的变量的更深 XML 级别。但是,当我尝试使用 XSLT 转换 XSD 时,它总是说我的样式表无效。仅当我在没有注释部分的情况下引用 de $descriptions 时,它才会发生转换,但随后我会得到该变量的所有描述。是否可以引用变量中的元素?
(我实际上并不需要注释[1],而是需要一个更困难的公式来找到正确的注释,但这个公式效果不佳。)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:variable name="descriptions">
<annotations>
<annotation element="Element1">Description for Element1</annotation>
<annotation element="Element2">Description for Element2</annotation>
<annotation element="Element3">Description for Element3</annotation>
</annotations>
</xsl:variable>
<xsl:template match="xs:element">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:variable name="description" select="$descriptions/annotations/annotation[1]"/>
我尝试过我的问题是否在命名空间内,但我真的找不到任何东西来解决甚至帮助它。
使用 XSLT 1.0,您可以使用带有空 URI 的
document()
函数来让样式表将自身加载为 XML 文档(XSLT 是 XML),然后使用指向变量的 XPath 并寻址所需的内容:
<xsl:variable name="description" select="document('')/xsl:stylesheet/xsl:variable[@name='descriptions']/annotations/annotation[1]"/>