XSLT求助:问题简化,如何给节点(element)添加属性(attribut)

shoppo0505 2017-07-20 11:54:38
现在用foreach 循环到了最终节点上,,我可以新建节点,但是我想给节点添加属性的时候,报如下错误:
XslTransformException
---------------------
Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added.

大致代码如下:
......
<xsl:for-each select="@*">
<xsl:element name="field">
<xsl:attribute name ="name">name</xsl:attribute>
<xsl:element name="{name()}"></xsl:element>
</xsl:element>
</xsl:for-each>
...
其实我是想将 <xsl:element name="{name()}"></xsl:element>中"{name()}"这个值添加为field的属性。
但是一直报错,对比和网上的例子,感觉代码没有区别阿。
...全文
1768 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
旅行商 2017-09-21
  • 打赏
  • 举报
回复
写了个简单的例子来做转换。

test.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<Root>
<Node attr1="1: this is attr1" attr2="1: this is attr2" />
<Node attr1="2: this is attr1" attr2="2: this is attr2" />
</Root>


test.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes" />
<xsl:template match="/Root">
<Root>
<xsl:for-each select="Node/@*">
<field>
<xsl:attribute name="{name()}">
<xsl:value-of select="." />
</xsl:attribute>
</field>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>


下面是转换的效果截图,在chrome和firefox中测试通过:
Chrome


Firefox
shoppo0505 2017-09-13
  • 打赏
  • 举报
回复
没人回帖,想结贴都不行啊。
shoppo0505 2017-07-27
  • 打赏
  • 举报
回复
没人回帖,想结贴都不行啊。

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧