XSLT 将 xml 存储在属性中



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

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

之后,我尝试将元数据 xml 作为 xsl:attribute 添加到另一个节点。我尝试了值,复制,但没有用。使用复制时,我收到以下错误。

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

有什么想法吗?

谢谢

第一次尝试,使用 value-of,应该使用一点 mod(使用 xs:text),但应该至少返回没有元数据元素的应用模板调用的值。您确定应用模板选择="..."位实际上是在查找和返回某些东西?

这有效:

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

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

相关内容

  • 没有找到相关文章

最新更新