xslt - Xslt 将元素复制到现有元素,如果不存在则创建新元素
问题描述
xml 转换非常新,我被困在(可能适合你)非常简单的任务。让我们建议我们有来源:
<root>
<someValue>123</someValue>
</root>
应该转化为:
<root>
<additional>
<someValue>123</someValue>
</additional>
</root>
但如果我们有这个作为来源:
<root>
<additional>
<b>something</b>
</additional>
<someValue>123</someValue>
</root>
我们应该将someValue移动到现有的附加,即:
<root>
<additional>
<b>something</b>
<someValue>123</someValue>
</additional>
</root>
请记住,在同一级别上可能存在具有相同行为的其他元素(移至附加下)。好吧,非常感谢工作示例,但是如果它附有对其工作原理的简短描述,那就太棒了(我更喜欢钓鱼,而不是仅仅被喂食)。
解决方案
一种可能的方法是添加一个additional
包装器作为 的子级root
,并删除现有的additional
包装器 - 因此它的子级向上移动成为root
(或者更确切地说是添加的additional
包装器的子级)的子级:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<xsl:copy>
<additional>
<xsl:apply-templates/>
</additional>
</xsl:copy>
</xsl:template>
<xsl:template match="additional">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- nightwatch.js - 浏览器一出现 Nightwatch 就会崩溃 - 正在工作并且没有进行任何更改
- node.js - 节点和 SQL Server 批量插入的 ERR_OUT_OF_RANGE 问题
- flask-login - 烧瓶登录当前用户在页面刷新/重定向时消失
- php - mariadb, PHP7 -- 不能授予所有数据库权限
- sql-server - 试图将熊猫数据框插入临时表
- visual-studio-code - 在 vscode 选项卡中显示更多路径
- laravel - 从树枝中的数据库动态显示背景图像
- jquery - 如何做 php jquery load_more 数据
- c++ - 如何将数据输入数组并通过函数打印它们?
- c# - 在 VSTO 中使用交换电子邮件搜索 Outlook 收件箱