बस ध्यान रखें कि आपको अनुक्रमिक रूप से फ़ाइल को पढ़ना होगा और भाई बहनों या वंशजों का जिक्र करना सबसे खराब और असंभव रूप से धीमा होने वाला है। अन्यथा @ मार्टिनहॉन की कुंजी है।
class Program
{
static IEnumerable<XElement> StreamRootChildDoc(string uri)
{
using (XmlReader reader = XmlReader.Create(uri))
{
reader.MoveToContent();
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (reader.Name == "Child")
{
XElement el = XElement.ReadFrom(reader) as XElement;
if (el != null)
yield return el;
}
break;
}
}
}
}
static void Main(string[] args)
{
IEnumerable<string> grandChildData =
from el in StreamRootChildDoc("Source.xml")
where (int)el.Attribute("Key") > 1
select (string)el.Element("GrandChild");
foreach (string str in grandChildData)
Console.WriteLine(str);
}
}
लेकिन मैं पाया है कि उदाहरण में StreamRootChildDoc
विधि इस प्रकार संशोधित करने की आवश्यकता:
स्रोत
2010-02-12 14:29:23
शानदार। मैं एक ऐप विकसित कर रहा हूं जो कई 200 एम एक्सएमएल फाइलों को प्रोसेस करेगा और एक्स डॉक्यूमेंट मुझे मार रहा था। इसने एक बड़ा सुधार किया है। धन्यवाद। –
मुझे लगता है कि 'XNode.ReadFrom' दस्तावेज़ पृष्ठ पर उदाहरण कोड में एक बग है। कथन 'XElement el = XElement.ReadFrom (पाठक) XElement के रूप में; 'XElement el = new XElement (reader.Name, reader.Value) होना चाहिए;' इसके बजाय। जैसा कि, प्रत्येक दो 'बाल' तत्वों में से पहला एक्सएमएल फ़ाइल में छोड़ा जाता है, जिससे वह पढ़ता है। –
मेरी आखिरी टिप्पणी या तो बिल्कुल सही नहीं है; अब मेरे लिए इस पर काम कर रहा है ... –