C#操作Xml的相关方法
一.
两种方式 XPath XmlDocument XmlNodeList
现有 XML 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<Company>
<Department >
<Name>IT Department</Name>
<Manager>猪头三</Manager>
<Employees>
<Employee>
<ID code="001" >10001</ID>
<Name>西门庆</Name>
<Gender>男</Gender>
</Employee>
<Employee>
<ID code="002">10202</ID>
<Name>潘金莲</Name>
<Gender>女</Gender>
</Employee>
</Employees>
</Department>
</Company>
需要取得 Name 为 “西门庆” 的 Employee 节点,用XPath实现如下:
XmlDocument xmlDoc = new
XmlDocument();
xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml
" ) );
XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee[Name='西门庆']
" );
//emp 即为 定位到的 Employee 节点
需要取得 code 为 002 的 Employee 节点, 用 XPath 实现如下:
XmlDocument xmlDoc = new
XmlDocument();
xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml
" ) );
XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee/ID[@code='002']/parent::node()
" );
XPath 寻径简介
xml文件,是一种树状结构, XPath 是针对xml文件寻径的一种 pattern。以开头的xml数据为例,下面给出几个常用的情形:
取得所有的 Employee
/Company/Department/Employees/Employee
XPath的开头是一个斜线(/)代表绝对路径
取得所有的 Name,不分层次
//Name
XPath 以 // 开头表示不限层次的一种模式
- 使用 * 匹配未知名称的元素(不能匹配未知层级)
取得所有的 Employee
/Company/Department/Employees/*
取得Department下,包含有 Employee 作为子节点的节点
/Company/Department/*/Employee
- 使用 [] 选择分支
XPath中的元素索引,是从 1 开始的
我们要选择 第一个 Employee
/Company/Department/Employees/Employee[1]
选择最后一个Employee
/Company/Department/Employees/Employee[last()]
选择叫西门庆的Employee
/Company/Department/Employees/Employee[Name='西门庆']
- 多路选择
XPath 用 | 或者 Or 进行多路选择
/Company/Deparment/Manager | /Company/Deparment/Name
- 选择属性
XPath中的属性,使用@开头
选择所有的 code 属性
二.
采用XmlDataSource 进行XML数据分页
1.使用控件形式
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(xml地址);
XmlDataSource1.Data = doc.InnerXml;
对于xmldatasource的设置:
其中xpatch是格式~见msdn这里的意思是取出前3条
数据绑定:
<%#getword(XPath( “title “))%>
2.编码形式
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(rss.RssUrl);
this.AspNetPager1.RecordCount = xmlDoc.GetElementsByTagName(“item”).Count;
XmlDataSource docSource = new XmlDataSource();
docSource.Data = xmlDoc.InnerXml;
docSource.EnableCaching = false; //设置XmlDataSource不缓存
int startIndex = CommonHelper.GetPageStartIndex(this.AspNetPager1.PageSize, Convert.ToInt32(Request.QueryString\["page"\]));
int endIndex = startIndex + this.AspNetPager1.PageSize;
docSource.XPath = "/rss/channel/item\[position()>" + startIndex + " and position()<" + endIndex + "\]";
this.GridViewRss.DataSource = docSource;
this.GridViewRss.DataBind();
注意:XmlDataSource 的 EnableCaching 属性,如果在分页的情况下需要设置为false,否则数据会有缓存
还没有评论,来说两句吧...