比较java单元文本中的Xml,忽略节点

时间:2017-02-07 09:25:40

标签: java xml junit xmlunit

我必须比较2个xml字符串。

实际

<?xml version="1.0" encoding="utf-8"?>
    <entry xmlns="http://www.w3.org/2005/Atom"
        xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
        xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
        xml:base="http://localhost:49531/ODataV2.svc/ODataV2.svc/">
        <content type="application/xml">
            <m:properties>
                <d:ID>2000</d:ID>
                <d:ReleaseDate>1992-01-01T00:00:00</d:ReleaseDate>
                <d:Rating>4</d:Rating>
                <d:Price>2.5</d:Price>
            </m:properties>
        </content>
    </entry>

预期

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
    xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
    xml:base="http://localhost:55615/ODataV2.svc/ODataV2.svc/">
    <content type="application/xml">
        <m:properties>
            <d:ID>2000</d:ID>
            <d:ReleaseDate>1992-01-01T00:00:00</d:ReleaseDate>
            <d:Rating>4</d:Rating>
            <d:Price>2.5</d:Price>
        </m:properties>
    </content>
</entry>

以下代码失败,因为根节点中属性xml:base中的端口号不同。

XMLAssert.assertXMLEqual(Actual, Expected);
  

预期的属性值   'http://localhost:55615/ODataV2.svc/ODataV2.svc/'但是   'http://localhost:49531/ODataV2.svc/ODataV2.svc/'

单元测试中的端口号在运行时更改。 有没有办法忽略特定属性并比较xml。

3 个答案:

答案 0 :(得分:1)

我知道不是最酷或幻想的解决方案,但你可以解析&#39;在比较它们之前的两个XML,并删除或更改该属性的值到两者中相似的东西,所以当你稍后比较它们时你肯定这个东西不会影响结果

答案 1 :(得分:1)

XMLUnit 2.x具有 for (int i = 0; i < vector.GetLength(0); i++) { if (i == 0) { VectorMinMax[1]= vector[i]; VectorMinMax[0]= vector[i]; } else { if (VectorMinMax[1] > vector[i]) VectorMinMax[1] = vector[i]; if (VectorMinMax[0] < vector[i]) VectorMinMax[0] = vector[i]; } } <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout> s的概念,它们很简单NodeFilter

AttributeFilter

可能会奏效。

答案 2 :(得分:-1)