0

我的 xslt 中有一个看起来像这样的变量。

<xsl:variable name="metadata">
    <Metadata>
        <xsl:apply-templates select="..." />
    </Metadata>
</xsl:variable>

之后,我尝试将元数据 xml 作为 xsl:attribute 添加到另一个节点。我尝试了value-of,copy-of,但没有用。使用副本时,出现以下错误。

<OtherNode>
    <xsl:attribute name="someAttr">
        <!-- I tried these and neither worked -->
        <xsl:value-of select="$metadata" /> <!-- Empty -->
        <xsl:copy-of  select="$metadata" /> <!-- Error -->
    </xsl:attribute>
</OtherNode>

不能在“属性”类型的节点内构造“元素”类型的项目。

这是相当直截了当的,但由于某种原因,我认为它会自动转义该元素。

顺便说一句,我正在使用 xslt 1.0。

有任何想法吗?

谢谢

4

2 回答 2

0

似乎您在变量中捕获的不仅仅是文本,而是拥有node()or node-set。您需要更改变量以仅选择text()您正在寻找的变量。

于 2012-09-21T15:33:41.073 回答
0

第一次尝试,使用 value-of,应该使用一点 mod(使用 xs:text),但应该至少返回不带 Metadata 元素的 apply-templates 调用的值。您确定 apply-templates select="..." 位实际上是在查找并返回某些内容吗?

这有效:

<xsl:variable name="metadata">
<xsl:text>&lt;Metadata></xsl:text>
    test
 <xsl:text>&lt;/Metadata></xsl:text>
</xsl:variable>


<xsl:template match="some-element">
  <xsl:element name="some-element">
    <xsl:attribute name="test"><xsl:value-of select="$metadata" /></xsl:attribute>
  </xsl:element>
</xsl:template>

输出如下:

 <some-element test="&lt;Metadata&gt;&#xA;        test&#xA;&lt;/Metadata&gt;">
于 2012-09-21T15:30:10.720 回答