我想知道是否可以使用XSL合并文档中的元素。具体针对以下示例。
我想合并元素,以便有效地聚合元素,包括任何其他后代(孙子)。
请注意,Child的键隐式包含父键,因此123 / ABC与456 / ABC不同。
很高兴知道如何确定" Wins"对于发生覆盖的那些(例如父/名)。
从此
<?xml version="1.0" encoding="UTF-8"?>
<listOfParent>
<parent>
<parentId>123</parentId>
<name>Jim</name>
<value>some data</value>
<listOfChild>
<child>
<childReference>ABC</childReference>
<name>Karen</name>
</child>
</listOfChild>
</parent>
<parent>
<parentId>123</parentId>
<name>Fred</name>
<listOfChild>
<child>
<childReference>ABC</childReference>
<name>Gemma</name>
</child>
<child>
<childReference>DEF</childReference>
<name>Karen</name>
</child>
</listOfChild>
</parent>
<parent>
<parentId>456</parentId>
<name>Bill</name>
<listOfChild>
<child>
<childReference>ABC</childReference>
<name>Penny</name>
</child>
<child>
<childReference>DEF</childReference>
<name>Rose</name>
</child>
</listOfChild>
</parent>
到这个
<?xml version="1.0" encoding="UTF-8"?>
<listOfParent>
<parent>
<parentId>123</parentId>
<name>not bothered</name>
<value>some data</value>
<listOfChild>
<child>
<childReference>ABC</childReference>
<name>not bothered</name>
</child>
<child>
<childReference>DEF</childReference>
<name>Karen</name>
</child>
</listOfChild>
</parent>
<parent>
<parentId>456</parentId>
<name>Bill</name>
<listOfChild>
<child>
<childReference>ABC</childReference>
<name>Penny</name>
</child>
<child>
<childReference>DEF</childReference>
<name>Rose</name>
</child>
</listOfChild>
</parent>
这是我试过的XSL
<?altova_samplexml Untitled1.xml?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kGDByIdKey" match="parent" use="parentId"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent
[generate-id()
=
generate-id(key('kGDByIdKey', parentId)[1])
]">
<xsl:copy>
<xsl:apply-templates select="@*|key('kGDByIdKey', parentId)/node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent"/>