XSLT将xml存储在属性中

时间:2012-09-21 15:07:08

标签: xml xslt xslt-1.0

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

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

之后,我正在尝试将元数据xml作为xsl:属性添加到另一个节点。我尝试了价值,复制,但它没有用。使用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。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

使用value-of的第一次尝试应该使用一个小mod(使用xs:text),但应该至少返回apply-templates调用的值而不使用Metadata元素。你确定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;">

答案 1 :(得分:0)

您似乎捕获的不仅仅是变量中的文字,而是node()node-set。您需要更改变量以仅选择您要查找的text()