2010-04-09 10 views
5

एक एक्सडॉक दस्तावेज़ उदाहरण को देखते हुए, मैं आसानी से टेक्स्ट रीडर कैसे प्राप्त कर सकता हूं जो उस उदाहरण का प्रतिनिधित्व करता है?मैं XDocument से टेक्स्ट रीडर आसानी से कैसे प्राप्त कर सकता हूं?

सबसे अच्छा मैं आने के लिए कुछ इस तरह (जहां xml एक XDocument उदाहरण है) के साथ कर लिया है:

var s = new MemoryStream(); 
var sw = new StreamWriter(s); 

xml.Save(sw); 

sw.Flush(); 
s.Position = 0; 

TextReader tr = new StreamReader(s); 

बहरहाल, यह एक छोटे से भद्दा लगता है, इसलिए हो, तो एक मैं सोच रहा था आसान तरीका?


संपादित

ऊपर के उदाहरण एक XML स्ट्रिंग के लिए पूरे उदाहरण परिवर्तित करने और फिर उस स्ट्रिंग पर एक TextReader बनाने के लिए बराबर है।

मैं बस सोच रहा था कि पूरी सामग्री को स्मृति में पढ़ने के बजाय इसे करने के लिए और अधिक स्ट्रीम-तरह तरीका है या नहीं।

+0

मार्क - बस मुझे हुआ कि मैं कभी-कभी उन मामलों के लिए "स्ट्रीम इन्वर्टर" का उपयोग करता हूं जहां कुछ एपीआई स्ट्रीम में लिखना चाहता है और मुझे इसे पढ़ने की आवश्यकता है (यानी एक एक्शन रिसैट के लिए)। इसे "टेक्स्ट लेखक इन्वर्टर" बनाने के लिए अनुकूलित किया जा सकता है, जो अनिवार्य रूप से आपको 'XDocument.Save' के माध्यम से सच स्ट्रीमिंग पहुंच प्रदान करेगा, लेकिन नकारात्मकता यह है कि इसे चलाने के लिए अतिरिक्त थ्रेड की आवश्यकता होती है। क्या वह आपकी मदद करेगा? – Aaronaught

+0

@ हारून: धन्यवाद, लेकिन यह संभवतः इसे बनाने के लिए बहुत अधिक है। मैंने मुख्य रूप से जिज्ञासा से सवाल पूछा। मेरे वर्तमान मुद्दे में, मैं एप्लिकेशन स्टार्टअप पर एक्सएमएल का एक छोटा टुकड़ा पार्स करने की उम्मीद करता हूं, इसलिए मैं निश्चित रूप से पूरे दस्तावेज़ को एक साथ लोड करने के साथ रह सकता हूं। –

+0

ठीक है, मुझे लगा कि आप इसे किसी नेटवर्क या उस प्रभाव से कुछ भेजने की कोशिश कर रहे थे। मुझे उत्सुकता है कि आपको ऐसा करने की आवश्यकता क्यों है, क्या आप एक एक्सएमएल एपीआई का उपयोग कर रहे हैं जो केवल 'टेक्स्ट रीडर' स्वीकार कर सकता है? – Aaronaught

उत्तर

3
TextReader tr = new StringReader(xml.ToString()); 

दया,

दान

+0

ठीक है, यह मेरे मूल दृष्टिकोण से निश्चित रूप से बेहतर है, लेकिन वास्तव में जो भी मैं ढूंढ रहा हूं वह वास्तव में नहीं है (मेरा संपादित प्रश्न देखें)। हालांकि, मुझे एक लाइन विकल्प देने के लिए +1 +1 :) –

+0

मैं शायद उस कॉलिंग को 'टेक्स्ट रीडर' को 'उपयोग' के साथ लपेटा जाना चाहिए क्योंकि यह 'आईडीस्पोजेबल' लागू करता है। –

0

मैं इसे करने की कोशिश नहीं की है, लेकिन एक विधि XNode.WriteTo(XmlWriter) है। पाठपरक प्रतिनिधित्व प्राप्त करने के लिए आप इसे XmlTextWriter पास कर सकते हैं। यह शायद लिखने के लिए कुछ और अधिक कोड लगेगा, लेकिन इसे और अधिक "धारा की तरह" होना चाहिए के रूप में आप :-) अनुरोध किया

[संपादित करें:] यहां तक ​​कि आसान: वहाँ एक विधि XNode.CreateReader() जो आपको एक XmlReader देता है। आपको स्वयं को पाठ में रूपांतरण को संभालना होगा।

+0

हां, लेकिन वह रगड़ है। जब तक मुझे कुछ याद नहीं आ रहा है, तब तक XmlReader से TextReader तक कोई आसान रूपांतरण नहीं है। –

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