请原谅我对XSLT的无知,我对它相当陌生。
使用 saxon xslt 2.0:我正在尝试从 xsl:variable 中获取单个元素,在应用 <xsl:copy-of select="$type">
时如下所示:
<type>
<label>Book</label>
<id>book</id>
</type>
尝试仅访问id元素 - 我尝试过:
<xsl:copy-of select="$type/id">
<xsl:copy-of select="$type[2]">
<xsl:value-of select="$type/id">
<xsl:value-of select="$type[2]">
也尝试了这个和一些变体
<xsl:value-of select="$type[name()='id']"/>
并尝试更改数据类型
<xsl:variable name="type" as="element">
使用 XSLT 2.0 node-set() 操作似乎不适用。
我寻求有关如何正确访问xsl:variable元素的详细描述,并且也很高兴发现我使用这一切都错了,有更好的方法。感谢您的见解和努力。
@martin-本能添加时:
<xsl:variable name="test1">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST1><xsl:copy-of select="$test1/type/id"/></TEST1>
<xsl:variable name="test2" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST2><xsl:copy-of select="$test2/id"/></TEST2>
我得到的结果:
<TEST1/>
<TEST2/>
如果你有
<xsl:variable name="type">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
那么你需要例如 <xsl:copy-of select="$type/type/id"/>
复制id
元素,因为type
变量绑定到临时文档节点,该临时文档节点包含一个具有id
子元素节点的type
元素节点。
或使用
<xsl:variable name="type" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
然后<xsl:copy-of select="$type/id"/>
工作,因为现在变量绑定到 type
元素节点。
以下是我建议的完整示例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:variable name="test1">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST1><xsl:copy-of select="$test1/type/id"/></TEST1>
<xsl:variable name="test2" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST2><xsl:copy-of select="$test2/id"/></TEST2>
</xsl:template>
</xsl:stylesheet>
输出为
<TEST1>
<id>book</id>
</TEST1>
<TEST2>
<id>book</id>
</TEST2>
要访问元素值,只需正确指定 XPath 即可type/id
<xsl:value-of select="type/id" />