我正在将一个XML转换为另一个XML。 让我们说我们开始的XML看起来像这样
<fruit id="123">
<apple></apple>
<banana></banana>
<lemon></lemon>
</fruit>
现在在我转换的XML中,我想用旧XML中的id属性值创建一个新属性。
我试着这样做:
<xsl:template match="fruit">
<xsl:attribute name="reference">
<xsl:value-of select="fruit/@id"/>
</xsl:attribute>
</xsl:template>
我收到此错误:
cannot create an attribute node whose parent is a document node
有人可以向我解释我做错了什么,因为我不理解这个错误。 解决方案会很好。
谢谢!
答案 0 :(得分:3)
问题是文档节点不能具有属性,并且您没有在输出树中为要应用的属性创建元素。文档节点还必须具有单个Element子项。
以下内容应该有效。
<xsl:template match="fruit">
<fruit>
<xsl:attribute name="reference">
<xsl:value-of select="@id"/>
</xsl:attribute>
</fruit>
</xsl:template>
答案 1 :(得分:1)
错误消息告诉您,您无法在此处创建属性节点,因为它没有属于它的元素。只有当你在一个元素内部(在输出意义上)和你还没有创建任何子节点(元素,文本节点,注释或处理指令)时,才能创建属性节点)在那个元素下。
除此之外,你的XPath是错误的 - 你在匹配fruit
元素的模板中,因此id
属性的路径只是@id
,而不是{ {1}}。