2012-11-13 19 views
6

का उपयोग कर विभिन्न उपसर्गों मैं 2 xml फ़ाइलें है:कैसे एक ही नाम स्थान के साथ दो एक्सएमएल तुलना करने के लिए, लेकिन जावा और xmlunit

समस्या में है उपसर्गों जिम्मेदार बताते हैं।

<element xmlns:prefix1="namespace" prefix1:attribute="some value">Some text</element> 


<element xmlns:prefix2="namespace" prefix2:attribute="some value">Some text</element> 

ये दो एक्सएमएल समान नामस्थान के साथ समान हैं, लेकिन विभिन्न उपसर्गों के साथ। अगर मैं xmlunit से तुलना करता हूं -> दावा विफल रहता है। मैं इसे कैसे संभाल सकता हूं?

समान() या समान() तुलना के मामले में मैं त्रुटि:

अपेक्षित विशेषता नाम 'संदेश: MessageNameString' लेकिन 'अशक्त'
अपेक्षित विशेषता नाम था 'संदेश: MessageVersion' लेकिन 'अशक्त था '
अपेक्षित विशेषता नाम' अशक्त 'लेकिन था' एमईएस: MessageNameString अशक्त '
अपेक्षित विशेषता नाम' 'लेकिन था' एमईएस: MessageVersion '

+0

क्या आप वास्तविक XML प्रदान कर रहे हैं जो आप परीक्षण कर रहे हैं? यहां तक ​​कि जब मैं गुण जोड़ता हूं तो "समान" चेक मेरे लिए गुजरता है। –

+0

मैं इसे ई-मेल में भेज सकता हूं। वे स्टैक ओवरफ्लो के रूपों के लिए बहुत बड़े हैं –

+0

एक्सएमएल "समानता" को परिभाषित करता है - इसी तरह की एक्सएमएल परिभाषा के आधार पर "समान" को परिभाषित करना संभव होना चाहिए। जैसे '' और '' अर्थात् वही दस्तावेज़ हैं। यदि बच्चे का आदेश महत्वपूर्ण है (यह अक्सर होता है) "समान()" का उपयोग करना समस्याग्रस्त है। नहीं! – mogsie

उत्तर

5

निम्न परीक्षण "समान" जांच प्रक्रिया से गुज़रते लेकिन "समान" विफल रहता है जांचें:

String control = "<prefix1:element xmlns:prefix1=\"namespace\" prefix1:attribute=\"x\">Some text</prefix1:element>"; 
    String test = "<prefix2:element xmlns:prefix2=\"namespace\" prefix2:attribute=\"x\">Some text</prefix2:element>"; 
    try 
    { 
     Diff diff = XMLUnit.compareXML(control, test); 
     assertTrue("Similar", diff.similar()); 
     assertTrue("Identical", diff.identical()); 
    } 
    catch (Exception e) 
    { 
     fail(e.getMessage()); 
    } 

xmlunit एपीआई डॉक्स से:

  • समान: दस्तावेजों में सामग्री और नोड्स के अनुक्रम वास्तव में कर रहे हैं एक ही
  • समान: दस्तावेजों में नोड्स की सामग्री एक ही हैं, लेकिन मामूली अंतर मौजूद हैं उदाहरण के लिए भाई तत्वों के अनुक्रमण, नामस्थान उपसर्गों के मूल्य, अंतर्निहित विशेषता मानों का उपयोग

तो "समान" चेक का उपयोग करके आप जो चाहते हैं उसे देना चाहिए।

संपादित करें: जोड़ा गया उपसर्ग विशेषताओं, एक ही परिणाम।

+0

समस्या विशेषता उपसर्ग में है। मैं अपना उदाहरण सही करता हूं। नोड्स के लिए यह काम करता है। –

0
// identical 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true) 
// similar 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false)