对 xml 转换相当陌生,我陷入了(可能对你来说)非常简单的任务。 让我们建议我们有来源:
<root>
<someValue>123</someValue>
</root>
应将其转换为:
<root>
<additional>
<someValue>123</someValue>
</additional>
</root>
但是如果我们有这个作为来源:
<root>
<additional>
<b>something</b>
</additional>
<someValue>123</someValue>
</root>
我们应该将someValue移动到现有的additional,即:
<root>
<additional>
<b>something</b>
<someValue>123</someValue>
</additional>
</root>
请记住,a级别上可能存在具有相同行为的其他元素(移至附加下)。 好吧,非常感谢工作示例,但如果它附有对其工作原理的简短描述,那就太棒了(我更喜欢钓鱼,而不是仅仅用它来喂食)。
最佳答案
一种可能的方法是添加一个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>
关于Xslt 将元素复制到现有元素或创建新元素(如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418018/