C#操作Xml的相关方法

╰半橙微兮° 2022-08-06 09:18 253阅读 0赞

一.

两种方式 XPath XmlDocument XmlNodeList

现有 XML 文件,内容如下:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Company>
  3. <Department >
  4. <Name>IT Department</Name>
  5. <Manager>猪头三</Manager>
  6. <Employees>
  7. <Employee>
  8. <ID code="001" >10001</ID>
  9. <Name>西门庆</Name>
  10. <Gender></Gender>
  11. </Employee>
  12. <Employee>
  13. <ID code="002">10202</ID>
  14. <Name>潘金莲</Name>
  15. <Gender></Gender>
  16. </Employee>
  17. </Employees>
  18. </Department>
  19. </Company>

tang_0.png 需要取得 Name 为 “西门庆” 的 Employee 节点,用XPath实现如下:

  1. XmlDocument xmlDoc = new
  2. XmlDocument();
  3. xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml
  4. " ) );
  5. XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee[Name='西门庆']
  6. " );
  7. //emp 即为 定位到的 Employee 节点

tang_0.png 需要取得 code 为 002 的 Employee 节点, 用 XPath 实现如下:

  1. XmlDocument xmlDoc = new
  2. XmlDocument();
  3. xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml
  4. " ) );
  5. XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee/ID[@code='002']/parent::node()
  6. " );

tang_26.png XPath 寻径简介

xml文件,是一种树状结构, XPath 是针对xml文件寻径的一种 pattern。以开头的xml数据为例,下面给出几个常用的情形:

  • 取得所有的 Employee

    /Company/Department/Employees/Employee

XPath的开头是一个斜线(/)代表绝对路径

  • 取得所有的 Name,不分层次

    //Name

XPath 以 // 开头表示不限层次的一种模式

  • 使用 * 匹配未知名称的元素(不能匹配未知层级)
  1. 取得所有的 Employee

    /Company/Department/Employees/*

  2. 取得Department下,包含有 Employee 作为子节点的节点

    /Company/Department/*/Employee

    • 使用 [] 选择分支

XPath中的元素索引,是从 1 开始的

我们要选择 第一个 Employee

  1. /Company/Department/Employees/Employee[1]

选择最后一个Employee

  1. /Company/Department/Employees/Employee[last()]

选择叫西门庆的Employee

  1. /Company/Department/Employees/Employee[Name='西门庆']
  • 多路选择

XPath 用 | 或者 Or 进行多路选择

  1. /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;

  1. XmlDataSource docSource = new XmlDataSource();
  2. docSource.Data = xmlDoc.InnerXml;
  3. docSource.EnableCaching = false; //设置XmlDataSource不缓存
  4. int startIndex = CommonHelper.GetPageStartIndex(this.AspNetPager1.PageSize, Convert.ToInt32(Request.QueryString\["page"\]));
  5. int endIndex = startIndex + this.AspNetPager1.PageSize;
  6. docSource.XPath = "/rss/channel/item\[position()>" + startIndex + " and position()<" + endIndex + "\]";
  7. this.GridViewRss.DataSource = docSource;
  8. this.GridViewRss.DataBind();

注意:XmlDataSource 的 EnableCaching 属性,如果在分页的情况下需要设置为false,否则数据会有缓存

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读