2017-02-03 2 views
5

से स्टिंग के रूप में एक्सएमएल नोड मान सेट करना मैं वेब सर्वर से कुछ एक्सएमएल डेटा वापस करने के लिए एक एपीआई कॉल का उपयोग कर रहा हूं। XML डेटा निम्न स्वरूप में है:सी # - स्ट्रीमरडर परिणाम

<forismatic> 
    <quote> 
     <quoteText>The time you think you're missing, misses you too.</quoteText>    
     <quoteAuthor>Ymber Delecto</quoteAuthor> 
     <senderName></senderName> 
     <senderLink></senderLink> 
     <quoteLink>http://forismatic.com/en/55ed9a13c0/</quoteLink> 
    </quote> 
</forismatic> 

मैं कच्चे XML डेटा को सफलतापूर्वक प्राप्त कर सकते हैं, और मैं तार को <quoteText> और <quoteAuthor> नोड मान जोड़ने के लिए चाहते हैं, लेकिन ऐसा करने में असमर्थ होने लगते हैं। मेरे वर्तमान कोड: स्ट्रिंग मान quote स्थापित करने के लिए कोशिश करते हुए

private void btnGetQuote_Click(object sender, EventArgs e) 
    { 
     WebRequest req = WebRequest.Create("http://api.forismatic.com/api/1.0/");        
     req.Method = "POST"; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     string reqString = "method=getQuote&key=457653&format=xml&lang=en"; 
     byte[] reqData = Encoding.UTF8.GetBytes(reqString); 
     req.ContentLength = reqData.Length; 

     using (Stream reqStream = req.GetRequestStream()) 
      reqStream.Write(reqData, 0, reqData.Length); 

     using (WebResponse res = req.GetResponse()) 
     using (Stream resSteam = res.GetResponseStream()) 
     using (StreamReader sr = new StreamReader(resSteam)) 
     { 
      string xmlData = sr.ReadToEnd(); 
      txtXmlData.Text = xmlData; 
      Read(xmlData); 
     } 
    } 

    private void Read(string xmlData) 
    { 
     XDocument doc = XDocument.Parse(xmlData); 
     string quote = doc.Element("quote").Attribute("quoteText").Value; 
     string auth = doc.Element("quote").Attribute("quoteAuthor").Value; 
     txtQuoteResult.Text = "QUOTE: " + quote + "\r\n" + "AUTHOR: " + auth;      
    } 

प्रकार 'System.NullReferenceException' की एक बिना क्रिया का अपवाद के साथ बाहर मेरे कार्यक्रम बम हुई। मैंने कुछ समान पोस्टों को देखा है और विभिन्न बदलाव किए हैं लेकिन दो स्ट्रिंग मान सेट नहीं लग रहे हैं।

उत्तर

5

आप doc.Element("quote") का उपयोग करने की कोशिश कर रहे हैं - ऐसा कोई तत्व नहीं है, इसलिए यह शून्य हो रहा है। आप doc.Root.Element("quote") चाहते हैं। इसके बाद आप quoteText और quoteAuthor के लिए पूछ रहे हैं जैसे कि वे गुण थे - वे नहीं हैं, वे तत्व भी हैं।

तो बुनियादी तौर पर आप चाहते हैं:

private void Read(string xmlData) 
{ 
    XDocument doc = XDocument.Parse(xmlData); 
    XElement quote = doc.Root.Element("quote"); 
    string text = quote.Element("quoteText").Value; 
    string author = quote.Element("quoteAuthor").Value; 
    txtQuoteResult.Text = $"QUOTE: {text}\r\nAUTHOR: {author}"; 
} 

(मैं व्यक्तिगत रूप से बनाने चाहते हैं विधि लौट स्ट्रिंग मान और txtQuoteResult.Text बुला विधि के भीतर के रूप में सेट है, लेकिन यह एक अलग बात है।)

+0

यह बहुत अच्छा है, बहुत टैंक! एक परीक्षण चलाएं और यह एक इलाज कर रहा है। मैं अभी भी एक्सएमएल के साथ पकड़ने और नोड्स/विशेषताओं/तत्वों को काम करने के लिए मिल रहा हूं। :) – Rawns

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