我的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。
有什么想法吗?
由于
答案 0 :(得分:0)
使用value-of的第一次尝试应该使用一个小mod(使用xs:text),但应该至少返回apply-templates调用的值而不使用Metadata元素。你确定apply-templates select =“...”位实际上是在寻找并返回一些内容吗?
这有效:
<xsl:variable name="metadata">
<xsl:text><Metadata></xsl:text>
test
<xsl:text></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="<Metadata>
 test
</Metadata>">
答案 1 :(得分:0)
您似乎捕获的不仅仅是变量中的文字,而是node()
或node-set
。您需要更改变量以仅选择您要查找的text()
。