XSLT将xml存储在属性中
我的xslt中有一个变量如下所示XSLT将xml存储在属性中,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我的xslt中有一个变量如下所示 <xsl:variable name="metadata"> <Metadata> <xsl:apply-templates select="..." /> </Metadata> </xsl:variable> 之后,我尝试将元数据xml作为xsl:属性添加到另一个节点。我试过的价值,副本的,它没有工作。当使用的副本时,我得到以下错误 <OtherNode&
<xsl:variable name="metadata">
<Metadata>
<xsl:apply-templates select="..." />
</Metadata>
</xsl:variable>
之后,我尝试将元数据xml作为xsl:属性添加到另一个节点。我试过的价值,副本的,它没有工作。当使用的副本时,我得到以下错误
<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>
“元素”类型的项不能在“属性”类型的节点内构造
这很简单,但出于某种原因,我认为它会自动逃逸元素
顺便说一下,我正在使用XSLT1.0
有什么想法吗
谢谢第一次尝试使用的值应该可以使用一点mod(使用xs:text),但至少应该返回不带元数据元素的apply templates调用的值。您确定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>">
似乎您在变量中捕获的不仅仅是文本,而是节点()
或节点集。您需要更改变量,以便只选择要查找的text()
。是的,在看到您的答案之前,我就是这么做的。我希望我不需要这样做,但是哦,好吧。谢谢没问题,绝对不是一个“酷”的解决方案,但有时仅仅完成它是最好的。完成后,继续讨论项目中的下一个问题/挑战:)如果您觉得这个答案很有用,它展示了如何将任何XML文档序列化为属性: