<root>
<xnode>
<Node1/>
<Node2/>
<Node3>
<CNode1>
<CCNode1>
<CCField1>
<CCField2>
<CCCNode1/>
</CCNode1>
<CCNode2>
<CCCNode3/>
</Node3>
<Node4/>
</xnode>
<xnode>
<Node1/>
<Node2/>
<Node3>
<CNode1>
<CCNode2>
<CCCNode3/>
</Node3>
<Node4/>
</xnode>
<xnode>
<Node1/>
<Node2/>
<Node3>
<CNode1>
<CCNode1>
<CCField1>
<CCField2>
<CCCNode1/>
</CCNode1>
<CCNode2>
<CCCNode3/>
</Node3>
<Node4/>
</xnode>
</root>
在上面的xml中,我需要复制除Node3以外的所有节点和值 - CNode1 - CCNode1。即,如果CCNode1存在副本,因为它包含子元素,如果不存在,则创建具有相应字段和子元素的CCNode1。例如,这里第一个和第三个xnode具有CCNode1,而在第二个xnode中缺少它。因此,按原样复制第一个和第三个节点1,并在第二个xnode中创建CCNode1及其子元素,并使用一些虚拟值。
请建议如何使用XSLT实现此目的。
感谢
答案 0 :(得分:0)
所以,我能说的最好的是你需要一个身份模板来复制一切。然后,您需要一个如下所示的模板来选择没有CCNode1节点的Node3 / CNode1节点。在那里你可以添加你的节点。
<xsl:template match="Node3/CNode1[not(.//CCNode1)]">
<xsl:copy>
Add your ccNode1 and child nodes here.
<!-- Output other child nodes of CNode1 -->
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Identity. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>