ऐसा लगता है कि जब भी मैं एक XMLReader का उपयोग करता हूं, तो मैं परीक्षण के एक समूह के साथ समाप्त होता हूं और यह पता लगाने की कोशिश कर रहा हूं कि मैं जो पढ़ रहा हूं उसके विरुद्ध मैं जो पढ़ रहा हूं, उसके विपरीत मैं जो पढ़ रहा हूं उसके विपरीत मैं जो पढ़ रहा हूं उसके विपरीत। मैं हमेशा इसे अंत में समझता हूं, लेकिन मैं अभी भी कई बार इसका उपयोग करने के बाद, ऐसा लगता हूं कि जब मैं विभिन्न कार्यों को कॉल करता हूं तो वास्तव में एक XMLReader क्या कर रहा है। उदाहरण के लिए, जब मैं पहली बार पढ़ता हूं, यदि यह तत्व प्रारंभ टैग पढ़ता है, तो क्या यह अब तत्व टैग के अंत में है, या तत्व के गुणों को पढ़ने के लिए तैयार है? क्या मैं अभी तक गुणों के मूल्यों को जानता हूं यदि मैं GetAttribute को कॉल करता हूं? अगर मैं इस बिंदु पर ReadStartElement को कॉल करता हूं तो क्या होगा? क्या यह प्रारंभ तत्व को पढ़ना समाप्त कर देगा, या अगले गुणों को छोड़कर, सभी विशेषताओं को छोड़ देगा? क्या होगा यदि मैं कई तत्वों को पढ़ना चाहता हूं - अगले तत्व को पढ़ने का प्रयास करने का सर्वोत्तम तरीका क्या है और यह निर्धारित करें कि उसका नाम क्या है। IsStartElement कार्य के बाद पढ़ा जाएगा, या क्या IStartElement मैंने जो तत्व पढ़ा है उसके बाद नोड के बारे में जानकारी लौटाएगा?मैं कभी भी XMLReader व्यवहार की भविष्यवाणी नहीं कर सकता। समझने पर कोई सुझाव?
जैसा कि आप देख सकते हैं कि मुझे वास्तव में यह समझने की कमी नहीं है कि एक XMLReader इसके पढ़ने के विभिन्न चरणों के दौरान कहां है और विभिन्न राज्यों द्वारा इसका राज्य कैसे प्रभावित होता है। क्या कोई साधारण पैटर्न है जिसे मैंने नोटिस करने में असफल रहा है?
string input = "<machine code=\"01\">The Terminator" +
"<part code=\"01a\">Right Arm</part>" +
"<part code=\"02\">Left Arm</part>" +
"<part code=\"03\">Big Toe</part>" +
"</machine>";
using (System.IO.StringReader sr = new System.IO.StringReader(input))
{
using (XmlTextReader reader = new XmlTextReader(sr))
{
reader.WhitespaceHandling = WhitespaceHandling.None;
reader.MoveToContent();
while(reader.Read())
{
if (reader.Name.Equals("machine") && (reader.NodeType == XmlNodeType.Element))
{
Console.Write("Machine code {0}: ", reader.GetAttribute("code"));
Console.WriteLine(reader.ReadElementString("machine"));
}
if(reader.Name.Equals("part") && (reader.NodeType == XmlNodeType.Element))
{
Console.Write("Part code {0}: ", reader.GetAttribute("code"));
Console.WriteLine(reader.ReadElementString("part"));
}
}
}
}
सबसे पहले समस्या, मशीन नोड पूरी तरह से छोड़ दिया जाता है:
यहाँ समस्या (प्रतिक्रियाओं से लिया गया) का एक और उदाहरण है। MoveToContent मशीन तत्व की सामग्री पर जाने लगता है क्योंकि इसे कभी भी पार्स नहीं किया जा सकता है। इसके अलावा, यदि आप MoveToContent को छोड़ते हैं, तो आपको एक त्रुटि मिलती है: "एलिमेंट 'एक अवैध XmlNodeType है।" ReadElementString करने की कोशिश कर रहा है, जिसे मैं काफी समझा नहीं सकता।
अगला समस्या है, पहले भाग तत्व को पढ़ने के दौरान, ReadElementString पढ़ने के बाद अगले भाग तत्व की शुरुआत में पाठक को स्थिति में दिखता है। यह पाठक का कारण बनता है। अगले भाग तत्व की शुरुआत में अगले भाग तत्व को छोड़कर अंतिम भाग तत्व पर कूदने के लिए पढ़ें। तो इस कोड के अंतिम आउटपुट है:
भाग कोड 01a: सही शाखा
भाग कोड 03: बिग पैर की अंगुली
यह है कि मैं कोशिश कर रहा हूँ XMLReader की confusign व्यवहार का एक प्रमुख उदाहरण है समझना।
+1 स्टिक के साथ स्टिक के लिए +1() –