本代码主要演示如何使用XmlReader对XML片段进行流式处理。这种做法,对大型的XML文档特别有用,它所需要的内存量非常的小。
示例代码在示例代码中,定义了一个自定义轴方法。在此轴方法中,通过调用XElement.ReadFrom()方法创建XML片段后,然后使用yield return返回该集合。这种做法可为自定义轴方法提供延迟执行语义。此自定义轴方法会查找出XML中的元素名为Child的所有元素。
然后在LINQ to XML的查询中将自定义轴方法的结果作为数据源,检索出Child元素的Key属性值大于1的所有的Child元素的GrandChild子元素的值,并将其打印到控制台上。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Xml;
using System.IO;
namespace Demo06Ex01
{
class Program
{
static IEnumerable StreamRootChildDoc(StringReader SReader)
{
using (XmlReader Reader = XmlReader.Create(SReader))
{
Reader.MoveToContent();
while (Reader.Read())
{
switch (Reader.NodeType)
{
case XmlNodeType.Element:
if (Reader.Name == "Child")
{
XElement ChildElement = XElement.ReadFrom(Reader) as XElement;
if (ChildElement != null)
yield return ChildElement;
}
break;
}
}
}
}
static void Main(string[] args)
{
string XmlContent = @"
aaa
bbb
ccc
";
var GrandChildValues =
from Element in StreamRootChildDoc(new StringReader(XmlContent))
where (int)Element.Attribute("Key") > 1
select Element.Element("GrandChild").Value;
foreach (var GrandChildValue in GrandChildValues)
{
Console.WriteLine(GrandChildValue);
}
}
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 这就是艺术,优雅的二维码生成器「GitHub 热点速览」
平时如果没有需要一般那团黑乎乎的二维码,估计路过的人看见第一眼就不会再看第二眼。但是假若,它是个帅哥靓妹,估计就不同了,更别提像是艺术画一样,将编码图案融入到画里的二维码生成器 qrbtf 作者的新作,怎一个美字了得。 二维码尚且可以如此优雅,英特尔怎么能甘于…