C# 通过XPath查询/搜索/查找XML

//实例:查找所有书名包含Harry的书

bookdemo.xml
<?xml version="1.0" encoding="utf-8" ?>

<bookstore>



<book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>



<book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>



<book category="WEB">

<title lang="en">XQuery Kick Start</title>

<author>James McGovern</author>

<author>Per Bothner</author>

<author>Kurt Cagle</author>

<author>James Linn</author>

<author>Vaidyanathan Nagarajan</author>

<year>2003</year>

<price>49.99</price>

</book>



<book category="WEB">

<title lang="en">Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>



</bookstore>

.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Xml;
using System.Xml.XPath;

//通过XPath查询XML,在XPath中使用函数 
publicpartialclass _Default : System.Web.UI.Page
{
public String contx;
protectedvoid Page_Load(object sender, EventArgs e)
{
contx
="";
XPathNavigator nav;
XPathDocument docNav;
//XPathNodeIterator NodeIter; 
XPathNavigator node;
String strExpression;

try
{
docNav
=new XPathDocument(System.AppDomain.CurrentDomain.BaseDirectory +"bookdemo.xml");
nav
= docNav.CreateNavigator();
strExpression
="/bookstore/book[contains(title/text(), 'Harry')]/title";
node
= nav.SelectSingleNode(strExpression);
contx
+= node.InnerXml;

/*
NodeIter = nav.Select(strExpression);
while (NodeIter.MoveNext())
{
contx += NodeIter.Current.Value + "<br />";
}
*/
}
catch (Exception)
{
contx
="Unfind !";
}
}
}

(注释部分为查询全部节点的方法)

原文地址:https://www.cnblogs.com/bloodmage/p/1940873.html