[英]Is it possible to copy data from child nodes and pass it to parent node and procced to delete the child nodes using XSLT
I am trying to eliminate child nodes and copy their data to parent node.我正在尝试消除子节点并将其数据复制到父节点。 For Example,例如,
<?xml version="1.0" encoding="utf-8"?>
<root>
<data>
<School>
<Name>
<Data>
<FirstName>DonaldDuck</FirstName>
</Data>
</Name>
</School>
</data>
</root>
Desired output is所需的 output 是
<?xml version="1.0" encoding="utf-8"?>
<root>
<data>
<School>
<Name>DonaldDuck</Name>
</School>
</data>
</root>
I have tried using below code but it did not work as expected我尝试使用下面的代码,但它没有按预期工作
<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="*"/>
<xsl:template match="root/data">
<xsl:copy>
<xsl:apply-templates select="school"/>
</xsl:copy>
</xsl:template>
<xsl:template match="school">
<xsl:copy>
<xsl:copy-of select="*/*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Any help would be highly appreciated.任何帮助将不胜感激。
You can achieve your goal by combining the Identity template with a simple replacement template:您可以通过将Identity 模板与简单的替换模板相结合来实现您的目标:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy>
<xsl:value-of select="Data/FirstName" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
This replaces the value of all Name
elements with the value of its Data/FirstName
child.这会将所有Name
元素的值替换为其Data/FirstName
子元素的值。 If you wanted to replace any child of a child, you should use the */*
axis instead - as you did in the example.如果你想替换一个孩子的任何孩子,你应该使用*/*
轴 - 正如你在示例中所做的那样。
In both cases, its output is:在这两种情况下,其 output 为:
<?xml version="1.0"?>
<root>
<data>
<School>
<Name>DonaldDuck</Name>
</School>
</data>
</root>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.