如何通过匹配属性使用XSLT合并两个xml文件?

时间:2012-04-30 18:53:18

标签: xml xslt merge

第一个输入文件:

<root> 
    <node id="N1">
        <fruit id="1" action="aaa">
            <orange id="x">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange>            
        </fruit>             
    </node>
</root>

第二个输入文件:

<root> 
    <node id="N1">
        <fruit id="1">
            <orange id="y">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange> 
            <orange id="z">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange>                       
        </fruit>
        <fruit id="2" action="bbb">
            <orange id="x">
                <attribute>
                    <color>Pink</color>
                    <year>2000</year>
                </attribute>
            </orange>            
        </fruit> 
    </node>
</root>

合并后的输出:

<root> 
    <node id="N1">
        <fruit id="1" action="aaa">
            <orange id="x">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange>     
            <orange id="y">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange>  
            <orange id="z">
                <attribute>
                    <color>Orange</color>
                    <year>2000</year>
                </attribute>
            </orange>              
        </fruit> 

        <fruit id="2" action="bbb">
            <orange id="x">
                <attribute>
                    <color>Pink</color>
                    <year>2000</year>
                </attribute>
            </orange>            
        </fruit> 
    </node>
</root>

这可以仅通过使用XSLT来完成吗?请告诉我有关问题的通用解决方案。

合并算法:

  • 首先找到节点fruit id = 1然后我们在第二个文件中找到了 同样的水果id = 1,每个水果id = 1的孩子我们都会被放进去 第一个文件中fruit id = 1的节点。

  • 如果水果ID不同,我们只需将其添加为新节点(不是 在水果id = 1)

  • 我们可以假设合并将基于'fruit'节点,所以 我们可以在xslt文件中使用变量'fruit'来简化它。

  • 并且它必须位于相同的节点ID下(上例中的N1)。

谢谢。

约翰

0 个答案:

没有答案