 闽公网安备 35020302035485号
                
                闽公网安备 35020302035485号
                - 文档节点:表示整个XML或HTML文档。文档节点也被称为根节点。在XPath中,可以使用/符号来选择文档节点,例如:/表示选择整个文档节点。
	
<bookstore>
    <book category='fiction'>
        <title>活着</title>
        <author>余华</author>
        <press>作家出版社</press>
        <date>2012-8-1</date>
        <page>191</page>
        <price>20.00</price>
        <staple>平装</staple>
        <series>余华作品(2012版)</series>
        <isbn>9787506365437</isbn>
    </book>
    <book category='non-fiction'>
        <title>撒哈拉的故事</title>
        <author>三毛</author>
        <press>哈尔滨出版社</press>
        <date>2003-8</date>
        <page>217</page>
        <price>15.80</price>
        <staple>平装</staple>
        <series>三毛全集(华文天下2003版)</series>
        <isbn>9787806398791</isbn>
    </book>
    <book category='non-fiction'>
        <title>明朝那些事儿(1-9)</title>
        <author>当年明月</author>
        <press>中国海关出版社</press>
        <date>2009-4</date>
        <page>2682</page>
        <price>358.20</price>
        <staple>精装16开</staple>
        <series>明朝那些事儿(典藏本)</series>
        <isbn>9787801656087</isbn>
    </book>
</bookstore>
除了这些基本节点类型之外,XPath还支持使用通配符:
| 通配符 | 描述 | 示例 | 
|---|---|---|
| * | 匹配任何元素节点 | //book/* 选取<book>元素下的任意子元素节点 | 
| @* | 匹配任何属性节点 | //book/@* 选取<book>元素上的任意属性节点,如<book category='fiction'>中的category属性 | 
| node() | 匹配任何类型的节点 | //book/node() 选取<book>元素下的所有类型的子节点,包括元素节点、文本节点、注释节点等 | 
| 谓语 | 描述 | 示例 | 
|---|---|---|
| [position()=n] | 选取位于指定位置的节点。n 是节点的位置(从 1 开始计数) | //book[position()=1] 选取第一个<book>元素 | 
| [last()=n] | 选取位于指定位置的最后一个节点。n 是节点的位置(从 1 开始计数) | //book[last()=1] 选取最后一个<book>元素 | 
| [contains(string, substring)] | 选取包含指定子字符串的节点。string 是节点的文本内容,substring 是要查找的子字符串 | //book[contains(title, 'XML')] 选取标题中包含子字符串'XML'的<book>元素 | 
| [starts-with(string, prefix)] | 选取以指定前缀开始的节点。string 是节点的文本内容,prefix 是要匹配的前缀字符串 | //book[starts-with(title, 'The')] 选取标题以'The'开始的<book>元素 | 
| [text()=string] | 选取文本内容完全匹配的节点。string 是要匹配的文本内容 | //book[text()='Book Title'] 选取文本内容为'Book Title'的<book>元素 | 
| [@category='non-fiction'] | 选取具有指定属性值的节点。category 是属性名称,non-fiction 是要匹配的值 | //book[@category='non-fiction'] 选取具有属性category值为'non-fiction'的<book>元素 | 
	
| 表达式 | 描述 | 示例 | 
|---|---|---|
| nodename | 选取此节点的所有子节点 | //bookstore/book 选取<bookstore>元素下所有<book>子元素 | 
| / | 从根节点选取直接子节点 | /bookstore 从根节点选取<bookstore>元素 | 
| // | 从当前节点选取子孙节点 | //book 选取所有<book>元素,无论它们在文档中的位置 | 
| . | 选取当前节点 | ./title 选取当前节点的<title>子元素 | 
| .. | 选取当前节点的父节点 | ../price 选取当前节点的父节点的<price>子元素 | 
| @ | 选取属性 | //book/@id 选取所有<book>元素的id属性 | 
// XML 文档内容
string xmlContent = @"
            <bookstore>
                <book category='fiction'>
                    <title>活着</title>
                    <author>余华</author>
                    <press>作家出版社</press>
                    <date>2012-8-1</date>
                    <page>191</page>
                    <price>20.00</price>
                    <staple>平装</staple>
                    <series>余华作品(2012版)</series>
                    <isbn>9787506365437</isbn>
                </book>
                <book category='non-fiction'>
                    <title>撒哈拉的故事</title>
                    <author>三毛</author>
                    <press>哈尔滨出版社</press>
                    <date>2003-8</date>
                    <page>217</page>
                    <price>15.80</price>
                    <staple>平装</staple>
                    <series>三毛全集(华文天下2003版)</series>
                    <isbn>9787806398791</isbn>
                </book>
                <book category='non-fiction'>
                    <title>明朝那些事儿(1-9)</title>
                    <author>当年明月</author>
                    <press>中国海关出版社</press>
                    <date>2009-4</date>
                    <page>2682</page>
                    <price>358.20</price>
                    <staple>精装16开</staple>
                    <series>明朝那些事儿(典藏本)</series>
                    <isbn>9787801656087</isbn>
                </book>
            </bookstore>";
// 创建 XPath 文档
using (XmlReader reader = XmlReader.Create(new StringReader(xmlContent)))
{
    XPathDocument xpathDoc = new XPathDocument(reader);
    // 堆代码 duidaima.com
    // 创建 XPath 导航器
    XPathNavigator navigator = xpathDoc.CreateNavigator();
    // 使用 XPath 查询(选择所有位于bookstore下、其category属性值为'fiction'的book元素中的title元素)
    string xpathExpression = "//bookstore/book[@category='fiction']/title";
    XPathNodeIterator nodes = navigator.Select(xpathExpression);
    // 检查是否有匹配的节点
    if (nodes != null)
    {
        // 遍历结果
        while (nodes.MoveNext())
        {
            // 检查当前节点是否为空
            if (nodes.Current != null)
            {
                Console.WriteLine(nodes.Current.Value);
            }
        }
    }
}
运行结果
