获取xsl:variable中的元素值

时间:2014-02-12 18:26:43

标签: xslt xslt-2.0 saxon xsl-variable

请原谅我对XSLT的无知我对它很新。

使用saxon xslt 2.0:我正在尝试从xsl:变量中获取单个元素,在应用<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元素的详细说明,并且也很乐意发现我使用这一切都是错误的,这是一种更好的方法。感谢您的见解和努力。

@马丁honnen 添加时:

<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/>

2 个答案:

答案 0 :(得分:1)

如果你有

<xsl:variable name="type">
  <type>
     <label>Book</label>
     <id>book</id>
  </type>
</xsl:variable>

然后你需要例如<xsl:copy-of select="$type/type/id"/>复制id元素,type元素绑定到包含带有type子元素节点的id元素节点的临时文档节点。{ / p>

或使用

<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>

答案 1 :(得分:0)

要访问元素值,只需正确指定type/id

的XPath
<xsl:value-of select="type/id" />