c# - Reading XML using XPathDocument using NetworkStream -
यह अनुप्रयोग लटकाए:
XPathDocument xPathDocument = नया XPathDocument (networkStream);
मुझे लगता है कि इस XPathDocument की वजह से अभी भी डेटा के लिए प्रतीक्षा कर रहा है, लेकिन यह को रोकने के लिए कैसे है?
पूरे एक्सएमएल भेजने के बाद सर्वर ने कनेक्शन बंद नहीं किया था (भविष्य में संचार के लिए शेष शेष कनेक्शन) XPathDocument अभी भी डेटा की प्रतीक्षा करता है सर्वर किसी अन्य डेटा को यह निर्धारित करने के लिए प्रदान नहीं करता है कि एक्सएमएल स्थानांतरण पूरा हो गया है या नहीं। हालांकि यह जांचना संभव है कि संपूर्ण XML रूट टैग समाप्त हो रहा है। XPathDocument रूट टैग समाप्त होने के लिए नहीं देखता है, इसलिए यह समाधान थोड़ा मुश्किल है, लेकिन काम करता है। मैं स्ट्रीम पढ़ रहा हूँ XmlReader का उपयोग कर और XmlWriter द्वारा एक्सएमएल पुन: उत्पन्न करता है जो स्ट्रिंगवर्टर में लिखता है। StringWriter के अंत स्ट्रिंग आउटपुट को StringReader के लिए suppiled है, जो XmlReader द्वारा पढ़ा जाता है। और वित्त, XPathDocument इस XmlReader से डेटा पढ़ता है। यहां उदाहरण कोड है:
XmlReader xmlReader = XmlReader.Create (नेटवर्क स्ट्रीम); स्ट्रिंग वाइटर स्ट्रिंग वाटर = नया स्ट्रिंगर्राइटर (); XmlWriter xmlReadBuffer = XmlWriter.Create (stringWriter); जबकि (xmlReader.Read ()) {स्विच (xmlReader.NodeType) {मामले XmlNodeType.XmlDeclaration: xmlReadBuffer.WriteStartDocument (); टूटना; मामले XmlNodeType.Element: xmlReadBuffer.WriteStartElement (xmlReader.Name); अगर (xmlReader.HasAttributes) xmlReadBuffer.WriteAttributes (xmlReader, गलत); यदि (xmlReader.IsEmptyElement) गोटो केस XmlNodeType.EndElement; टूटना; मामले XmlNodeType.EndElement: अगर (xmlReader.Depth == 0) {xmlReadBuffer.WriteEndElement (); xmlReadBuffer.WriteEndDocument (); गोटो एंडक्सिल; } XmlReadBuffer.WriteEndElement (); टूटना; मामले XmlNodeType.Text: xmlReadBuffer.WriteString (xmlReader.Value); टूटना; डिफ़ॉल्ट: ब्रेक; }} एंडएक्सml: xmlReadBuffer.Flush (); XPathDocument xPathDocument = नए XPathDocument (XmlReader.Create (नई StringReader (stringWriter.ToString ())));
जो मुझे इस ओर इशारा किया के लिए बिग धन्यवाद।
Comments
Post a Comment