2012-02-01 18 views
6

मैं एक फ़ंक्शन को कॉल कर रहा हूं जो XML डेटा वाले स्ट्रिंग को लौटाता है। यह फ़ंक्शन कैसे काम करता है महत्वपूर्ण नहीं है लेकिन परिणामस्वरूप xml फ़ंक्शन की सफलता के आधार पर भिन्न हो सकता है।अपेक्षित संरचना के लिए XML की जांच

असल में फ़ंक्शन या तो अपेक्षित एक्सएमएल या त्रुटि स्वरूपित एक्सएमएल वापस कर देगा।

<SpecificResult> 
    <Something>data</Something> 
</SpecificResult> 

त्रुटि पर::

<ErrorResult> 
    <ErrorCode>1</ErrorCode> 
    <ErrorMessage>An Error</ErrorMessage> 
</ErrorResult> 

तरह से अपने सिस्टम की स्थापना की है कि मैं यह कर सकते है नीचे क्या दो परिणाम दिखाई देती हैं इसका बुनियादी नमूने ...

सफलता पर कर रहे हैं एक सरल कनवर्टर फ़ंक्शन के साथ एक एक्सएमएल स्ट्रिंग को कक्षा में कनवर्ट करें, लेकिन इसके लिए मुझे कक्षा के प्रकार को जानने की आवश्यकता है। सफलता पर, मुझे पता चलेगा कि यह विशिष्ट परिणाम है और मैं परिवर्तित कर सकता हूं। लेकिन अगर कोई त्रुटि हुई तो मैं पहले जांचना चाहता हूं।

आदर्श अंतिम परिणाम यह करने के लिए कुछ इसी तरह की अनुमति होगी ...

string xml = GetXML(); 
if(!IsError(xml)) 
{ 
    //convert to known type and process 
} 

तो सवाल है, क्या IsError समारोह को लागू करने के लिए सबसे अच्छा तरीका है?

मैं विकल्पों में से एक जोड़ी के बारे में सोचा है, लेकिन यकीन है कि अगर मैं उनमें से किसी की तरह वास्तव में नहीं ...

  1. जांच अगर xml स्ट्रिंग ErrorResult वर्ग के लिए एक्सएमएल बदलने और जांच करने के लिए "<ErrorResult>"
  2. कोशिश
  3. उपयोग XDocument या इसी तरह के कार्यों में बनाया पेड़ पार्स और ErrorResult नोड

उत्तर

5

के लिए खोज GetXml() विधि के बाद से करने के लिए असफल अनिवार्य रूप से सेवानिवृत्त है urning untyped डेटा और केवल सुरक्षित धारणा है कि यहाँ यह अपने वास्तविक प्रकार का दावा करने के लिए XML के रूप में यह पार्स करने के लिए किया जाएगा सबसे सुरक्षित तरीका एक्सएमएल के रूप में संरचित है:

private bool IsError(string xml) 
{ 
    var document = XDocument.Parse(xml); 
    return document.Element("ErrorResult") != null; 
} 
+0

धन्यवाद यह मेरे लिए काफी ठोस लग रहा है। बस यह सुनिश्चित करने के लिए कि दस्तावेज़ों में msdn स्पष्ट नहीं था, एक असफल 'पारसे' प्रयास अभी भी एक एक्सडॉक्यूमेंट (हालांकि खाली एक खाली) को वापस कर देगा? ... भी, स्वीकृत उत्तर के लिए बाहर निकलें, यह देखने के लिए इंतजार करेगा कि दूसरों के पास कोई इनपुट है या नहीं;) – musefan

+1

[XDocument.Parse (string)] (http://msdn.microsoft.com/en-us/library/system। xml.linq.xdocument.parse.aspx) वास्तव में [एक्सएमएलएक्सप्शन फेंक देगा अगर यह अमान्य एक्सएमएल का सामना करता है] (http://msdn.microsoft.com/en-us/library/bb387040.aspx)। हालांकि, यह इस मामले में वास्तव में * असाधारण * स्थिति की तरह लगता है, इसलिए आप इसे 'IsError (string)' विधि में संभाल नहीं सकते हैं बल्कि अपवाद को कॉल श्रृंखला में आगे बढ़ाने की अनुमति देते हैं। –

संबंधित मुद्दे