在 xsl:variable 中获取元素值



请原谅我对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" />

相关内容

  • 没有找到相关文章

最新更新