您的位置:首页 > 其它

Linq to XML 基本类

2012-09-26 21:44 281 查看
XDocument,XElement类:

分别代表了XML文档和XML元素,都继承了抽象基类XContainer,调用load可以载入不同存储方式的xml内容并生成文档或元素实例类,静态方法Parse可以直接解析字符串为xml

Elements,Descendants方法都是返回指定名字的元素集合,不同的是Elements方法返回的是查找当前元素的子元素,Descendants会继续查找所有子节点

XmlConvert类:

EncodeName或EncodeNmToken可以编码不合法节点名为合法的,如:

XmlConvert.EncodeNmToken("s d")的结果为"s_x0020_d",其中的空格被编码成了_x0020_

XAttribute类:

XML属性示例,可以放入任何XContainer中

NextAttribute和PreviousAttribute属性分别用于获取父元素的相邻元素

XNode类:

是众多X*类的基类,提供节点插入替换等操作

XNamespace,XName类:

用于定义命名空间和节点名(tag),XNamespace和String联合体会产生一个新的Xname,ToString方法会返回"{命名空间}tag名"的字符串,该解析字符串成为扩展名称;

当给元素设置XName时会自动处理命名空间声明,也可以直接设置扩展名称格式的字符串,但是这样的开销会比显示声明的XNamespace开销更大

定义前缀方法:

XElement node = new XElement(ns + "name", new XAttribute(XNamespace.Xmlns + "c", ns), "jack");
//输出<c:name xmlns:c="www.tt.com">jack</c:name>

XStreamingElement类:

用于延迟表达式求值,使XML元素在使用时值才被求出,类似Ling表达式的延迟求值,该类代表一个IEnumerable<T>目录树,当读取大量集合数据时,结合XmlReader能够保持一个较小的内存占用(因为不是一次全部载入,IEnumerable<T>迭代载入)

用法:

static IEnumerable<XElement> ChunkedDataSourceReader(String uri, String chunkElement)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = new XmlSecureResolver(new XmlUrlResolver(), "C:\\sources");
settings.MaxCharactersInDocument = (1024 * 1024) * 4; // MAX 4MB
XmlReader xr = XmlReader.Create(uri, settings);

while (xr.Read())
{
if ((xr.NodeType == XmlNodeType.Element)
&& (xr.Name == chunkElement))
{
// For debugging and demo purposes only
Console.WriteLine("Reading a chunk element from data source");

yield return XElement.ReadFrom(xr) as XElement;
}
}
}

static void Main(string[] args)
{
var customers = ChunkedDataSourceReader(@"CustomersWithOrders.xml","customer");
XStreamingElement xmlCustomers = new XStreamingElement("customers",
customers);
xmlCustomers.Save(@"Output.xml");
}


customers是一个集合,如果new XStreamingElement("customers", customers.ToList());就无法利用该类特特性,因为整个数据源就载入了内存

通用方法:

AddAnnotation方法:添加批注,可以使任意类型,和XMLInfoset无关

用法:

node.AddAnnotation("A1");
node.AddAnnotation("A2");
var annos= node.Annotations<string>();//读取批注
foreach (var anno in annos)
Console.WriteLine(anno);


Changed,Changing事件:通知节点改变

Validate方法:验证XML架构,System.Xml.Schema命名空间内的扩展方法,可以结合Changed事件验证改变后的XML

System.Xml.XPath命名空间有对XNode扩展的XPath方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: