我的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><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>">
您似乎捕获的不仅仅是变量中的文本,而是node()
或node-set
.您需要更改变量以仅选择您要查找的text()
。