2013-07-05 8 views
5

से एक्सएमएल पढ़ना मैं एएसपी.नेट के साथ काम कर रहा हूं, और एक फॉर्म से एक्सएमएल फाइल आयात कर रहा हूं। अभी मैं एक Stream में है कि परिवर्तित:स्ट्रीम

Stream inputStream = XmlFileUploadControl.PostedFile.InputStream; 

क्योंकि मैं इस संस्करण बाद में पड़ सकता है।

मैं पहली बार लगता है कि एक्सएमएल फ़ाइल सही स्वरूप है बनाना करने के लिए जाँच करना चाहते हैं, और, अगर ऐसा है, तो कुछ जानकारी प्रदर्शित:

if (CorrectFileFormat(inputStream)) 
{ 
    DisplayLicenseInfo(inputStream); 
} 

else 
{ 
    StatusLabel.Text = "Selected file is not a LicensingDiag XML file"; 
} 

CorrectFileFormat() विधि:

protected Boolean CorrectFileFormat(Stream inputStream) 
{ 

    XmlReader reader = XmlReader.Create(inputStream); 

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "DiagReport") 
    { 
     return true; 
    } 
} 

DisplayLicenseInfo() विधि:

protected void DisplayLicenseInfo(Stream inputStream) 
{ 

    XmlReader reader = XmlReader.Create(inputStream); 

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "LicensingStatus") 
    { 
     StatusLabel.Text += ("Licensing Status: " + reader.ReadString() + "<br><br>"); 
    } 

} 

हालांकि, मैं कर रहा हूँ XmlException का सामना करना जो कहता है "रूट स्तर पर डेटा अमान्य है। क्योंकि मैं पहले से ही एक बार इनपुट स्ट्रीम के माध्यम से पढ़ा है, और उसे रीसेट करना लाइन 1, स्थिति 1 "। इस है? यदि हां, तो मैं कैसे करते हो?

+1

स्ट्रिंग का मूल्य क्या है? यह संभवतः उस अजीब 'फीफ' है ... –

उत्तर

5

पहली बार जब आप एक XmlReader धारा के आसपास बना सकता हूँ , यह 0 डिग्री पर है। लेकिन दूसरी बार जब आप XmlReader बनाते हैं, तो स्ट्रीम पहले ही आंशिक रूप से पढ़ी जा चुकी है, इसलिए यह 0 स्थिति पर नहीं है, इसलिए XmlReader एक्सएमएल दस्तावेज़ नहीं पढ़ सकता है।

इसके बजाए, आप केवल एक बार XmlReader बनाना चाहिए:

using (XmlReader reader = XmlReader.Create(inputStream) 
{ 
    if (CorrectFileFormat(reader)) 
    { 
     DisplayLicenseInfo(reader); 
    } 
    else 
    { 
     StatusLabel.Text = "Selected file is not a LicensingDiag XML file"; 
    } 
} 

फ़ाइल है छोटे, आप भी (XML को LINQ) XmlDocument या XDocument का उपयोग कर पूरे XML दस्तावेज़

+0

धन्यवाद, यही वह है जो मैं सोच रहा था। 'XmlReader' ऑब्जेक्ट में पढ़ने के साथ कोई समस्या नहीं है, जैसा कि पहली विधि में किया जाएगा, या दूसरी विधि अभी भी शुरुआत में शुरू होगी? –

+0

हालांकि यह निश्चित रूप से सही दिशा में जाता है, और मुझे डिस्प्ले() विधि में ले जाता है, फिर यह उस विधि में निष्पादित कथन के लिए कुछ करता है, जहां यह अब काम नहीं करता है। कोई विचार? –

+0

@Adam_G, एक ही पाठक का उपयोग करने वाली दूसरी विधि वर्तमान स्थिति से जारी रहेगी। आपके दूसरे प्रश्न के बारे में, आपको और सटीक होना चाहिए ... "यह कथन के लिए कुछ करता है" से आपका क्या मतलब है? और यह वास्तव में "अब काम नहीं करता" कैसे करता है? –

4

@ थॉमस-लेवेस्क https://stackoverflow.com/users/98713/thomas-levesque सही, सामग्री ही अच्छी तरह से गठित किया गया है, तो आप धारा वापस करने के लिए रिवाइंड करने के लिए की जरूरत है था लोड हो रहा विचार कर सकते हैं सामग्री की शुरुआत।

CorrectFileFormat() विधि:

protected Boolean CorrectFileFormat(Stream inputStream) 
{ 
    // rewind the stream back to the very beginning of the content 
    inputStream.Seek(0L, SeekOrigin.Begin); 
    XmlReader reader = XmlReader.Create(inputStream); 

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "DiagReport") 
    { 
     return true; 
    } 
} 

DisplayLicenseInfo() विधि:

protected void DisplayLicenseInfo(Stream inputStream) 
{ 
    // rewind the stream back to the very beginning of the content 
    inputStream.Seek(0L, SeekOrigin.Begin); 
    XmlReader reader = XmlReader.Create(inputStream); 

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "LicensingStatus") 
    { 
     StatusLabel.Text += ("Licensing Status: " + reader.ReadString() + "<br><br>"); 
    } 
} 
संबंधित मुद्दे