जब मैं LINQ XmlReader क्लास का उपयोग कर XML को पार्स करने का प्रयास करता हूं तो मुझे अजीब व्यवहार दिखाई दे रहा है। नीचे टेस्ट केस: ऐसा लगता है कि मैं X12Reader पर (XElement)XNode.ReadFrom(xmlReader)
या Read()
विधियों में से एक का उपयोग करता हूं, यह इनपुट XML में दूसरे bar
तत्वों को याद करता है। यदि </bar>
और <bar>
के बीच कोई व्हाइटस्पेस जोड़ा गया है तो यह दूसरे bar
तत्व को सही तरीके से पार्स करेगा।यदि कोई व्हाइटस्पेस विभाजक नहीं है तो XmlReader हर दूसरे तत्व को क्यों छोड़ देता है?
क्या किसी के पास कोई विचार है कि क्यों इनपुट स्ट्रीम गड़बड़ हो जाती है और इस समस्या को कैसे प्राप्त किया जाए?
[Test]
[Explicit]
public void ShouldParseCorrectNumberOfElements()
{
var xml = @"<foo><bar>wtf</bar><bar>wtf2</bar></foo>";
XmlReader xmlReader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
int count = 0;
xmlReader.MoveToContent();
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar")
{
var element = xmlReader.ReadOuterXml();
Console.WriteLine("just got an " + element);
count++;
}
}
Assert.AreEqual(2, count);
}
पाश काफी 'ReadToFollowing (" बार ") का उपयोग करके अनुकूलित किया जा सकता है' बजाय 'पढ़ें()' (जॉन का जवाब भी साथ काम करता है):
यहाँ अपने पाश के लिए एक विकल्प है। –
मेरे पास एक समान मामला है और मैं जबकि लूप के अंदर 'जबकि' और 'ReadOuterXml' के साथ' ReadToFollowing' का उपयोग कर रहा हूं। यदि दस्तावेज़ को न्यूलाइन के साथ स्वरूपित किया गया है तो यह ठीक से काम कर रहा है। जब मेरे पास एक सिंगल लाइन दस्तावेज़ होता है तो यह निम्नलिखित सभी नोड्स को छोड़ देता है। –