使用 XSL 从一个节点移动到另一个节点
所以我想使用 XSL 将以下内容转换
<doc>
<data id="priority" level="2" include="true">
<name>Priority</name>
</data>
<data id="cost" level="1" leveltype="number">
<name>Cost</name>
</data>
<data id="date" level="3" include="true">
<name>Date</name>
</data>
</doc>
为这个
<doc>
<data id="priority">
<name>Priority</name>
</data>
<data id="cost">
<name>Cost</name>
</data>
<data id="date">
<name>Date</name>
</data>
<!-- ordering matters, though if necessary I can reorder this manually via the DOM instead of XSL -->
<levels>
<level id="cost" include="false" type="number"/>
<level id="priority" include="true"/>
<level id="date" include="true"/>
</level>
</doc>
基本上我想采用级别属性并使它们成为自己的东西。如果有某种方法可以删除级别编号并使用节点的顺序来表示它,那将是一个巨大的好处。
So I want to convert the following using XSL
<doc>
<data id="priority" level="2" include="true">
<name>Priority</name>
</data>
<data id="cost" level="1" leveltype="number">
<name>Cost</name>
</data>
<data id="date" level="3" include="true">
<name>Date</name>
</data>
</doc>
To this
<doc>
<data id="priority">
<name>Priority</name>
</data>
<data id="cost">
<name>Cost</name>
</data>
<data id="date">
<name>Date</name>
</data>
<!-- ordering matters, though if necessary I can reorder this manually via the DOM instead of XSL -->
<levels>
<level id="cost" include="false" type="number"/>
<level id="priority" include="true"/>
<level id="date" include="true"/>
</level>
</doc>
Basically I want to take the level attributes and make them their own thing. A huge bonus would be if there were some way to remove the level number and use the order of the node instead to represent that.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是一个仅使用模板的更短、更简单的解决方案(无
):应用于提供的 XML 文档时 :
产生了想要的正确结果:
说明:
使用和覆盖身份规则/模板。
使用
mode="level"
生成结果文档的第二部分。This is a shorter and simpler solution using only templates (no
<xsl:for-each>
):When applied on the provided XML document:
the wanted, correct result is produced:
Explanation:
Using and overriding the identity rule/template.
Using
mode="level"
to generate the second part of the result-document.只是一个变体:
Just a variant:
解决方案如下:
我假设预期输出中的
是复制/粘贴人工制品,因为缺少属性来自输入中的level[@id="cost"]
。Here's the solution:
I assume that
<level id="cost" include="false" type="number"/>
in your expected output is a copy/paste artefact as the attribute is missing fromlevel[@id="cost"]
in the input.可能是一个更简单的方法:
May be a simpler way: