Linq to xml:流式处理 XmlReader

IEnumerable<string> grandChildData =
                from el in StreamRootChildDoc(new StringReader(markup))
                where (int)el.Attribute("Key") > 1
                select (string)el.Element("GrandChild");

            foreach (string str in grandChildData)
            {
                Console.WriteLine(str);
            }

处理函数

 static IEnumerable<XElement> StreamRootChildDoc(StringReader stringReader)
        {
            using (XmlReader reader = XmlReader.Create(stringReader))
            {
                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;
                    }
                }
            }
        }

关于作者: 王昕(QQ:475660) 在广州工作生活30余年。十多年开发经验,在Java、即时通讯、NoSQL、BPM、大数据等领域较有经验。
目前维护的开源产品:https://gitee.com/475660
原文地址:https://www.cnblogs.com/starcrm/p/1362827.html