使用xquery进行XML比较

时间:2011-12-07 11:59:25

标签: xml xslt xquery

我是XSLT / Xquery的新手,想要比较两个xml文件(数据内容并可以忽略空格和注释)并打印第二个xml的已更改节点。据我所知(谷歌搜索)我相信它可以使用Xquery完成。我的xml将如下所示。

<ns:Batch xmlns:ns="http://www.sample.com/">
<ns:Product>
    <ns:productId>AB02921</ns:productId>
    <ns:type>Product</ns:type>
    <ns:productDescription>
        <ns0:string xmlns:ns0="http://www.sample.com/core" country="US" language="en">EVE BOOTCUT JEAN</ns0:string>
    </ns:productDescription>
    <ns:productLongDescription>
        <ns0:string xmlns:ns0="http://www.sample.com/core" country="US" language="en">For perennial cool with an uber comfortable tw...</ns0:string>
    </ns:productLongDescription>
    <ns:posDetails>
        <ns:isTemplate>false</ns:isTemplate>
    </ns:posDetails>
    <ns:isTemplate>false</ns:isTemplate>
    <ns:lastUpdated>2011-09-07T16:52:50.573</ns:lastUpdated>
    <ns:exportDetails>
        <ns:isTemplate>false</ns:isTemplate>
    </ns:exportDetails>
    <ns:mmGroupId groupTypeId="mmGroup" groupHierarchyId="ABC" variantGroupTypeId="region" variantGroupId="All" variantGroupHierarchyId="All">JSBFO</ns:mmGroupId>
    <ns:inventoryDetails>
        <ns:isTemplate>false</ns:isTemplate>
    </ns:inventoryDetails>
    <ns:productDimensions>
        <ns:isTemplate>false</ns:isTemplate>
    </ns:productDimensions>
    <ns:warrantyDetails>
        <ns:isTemplate>false</ns:isTemplate>
    </ns:warrantyDetails>
    <ns:standardCostPrice>0.0</ns:standardCostPrice>
    <ns:standardMargin>0.0</ns:standardMargin>
    <ns:colourId colourRangeId="Default">6007</ns:colourId>
    <ns:sizeId sizeRangeId="Default">14</ns:sizeId>
    <ns:styleId>AB029</ns:styleId>
</ns:Product>

我需要与所有这些重复节点进行比较,可以返回此节点内已更改的节点。请求所有人帮助我。 问候, 斯里兰卡。

3 个答案:

答案 0 :(得分:4)

比较两个XML文档是一项具有挑战性的任务,部分原因是那些通常要求这个问题的人没有对问题的明确定义,实际上并不确切地知道他们在问什么对

这就是说,尝试这个标准的XPath 2.0功能

deep-equal()

答案 1 :(得分:1)

XML比较并非易事。我倾向于使用XMLUnit http://xmlunit.sourceforge.net/来解决这类问题

答案 2 :(得分:-1)

序列化为文字,&gt;&lt;之间没有空格并进行文本比较! 。如果你想要一个视觉表示,那么使用谷歌差异。或者使用deepequal