XPath的初步认识

                  嘿嘿,最近开始上班,不是过于太忙,而是自己一直在学习一些项目中用到的而我暂时还没接触的知识,WCF,log4等,感觉还没有总结的需要吧,虽然都了解啦,但是暂时还是初步的学习,基础的暂时是知道啦,还没有练习的太多吧,嘿嘿,由于以后就要常常使用XPath啦,所以就来做一个XPath的Demo练习下。

           一.XPath的Demo
           下面是在html页面上操作元素,使用XPath过滤想要的表格文本,然后以表格的形式保存在一个文本中,如下所示:

using System;
using System.Web;
using HtmlAgilityPack;
using System.IO;
using System.Xml;

public class Handler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        int num = 0;
        string xpathtrNode = "//*[@id='ReportList']/thead/tr/th";
        string xpathtdNode = "//*[@id='ReportList']/tbody/tr/td";
        //获取html的路径
        string path = context.Request.MapPath("HtmlPage.html");
        //string html = File.ReadAllText(path);
        //使用Nuget包下载并添加引用HtmlAgilityPack,调用其方法获取html
        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.Load(path);
        
        //创建html的节点
        HtmlNode rootNode = htmlDoc.DocumentNode;
        //使用XPath获取需要查询的元素文本,返回一个HtmlNode类型的集合
        HtmlNodeCollection tabList = rootNode.SelectNodes(xpathtrNode);
        
        HtmlNode tdNode = htmlDoc.DocumentNode;
        HtmlNodeCollection tdList = tdNode.SelectNodes(xpathtdNode);
        
        //HtmlNode td13=htmlDoc.DocumentNode;
        //HtmlNodeCollection td13List =td13.SelectNodes(xpLasttd);
        foreach ( HtmlNode item in tabList)
        {
            num++;
            string tableText = item.InnerText + "   ";
            if (num == 13)
            {
                tableText = tableText + "\n";
                num = 0;
            }
            //常见文件,把要输出的内容输出在Excel文件中
            File.AppendAllText(@"F:\公司Xpath\tablepath.xls", tableText, System.Text.Encoding.Default);
        }
        foreach (HtmlNode td in tdList)
        {
            string tdText = td.InnerText;
            tdText = tdText + "         ";
            num++;
            if (num == 13)
            {
                tdText = tdText + "\n";
                num = 0;
            }
            File.AppendAllText(@"F:\公司Xpath\tablepath.xls", tdText, System.Text.Encoding.Default);
        }
    }
}

            二.XPath的运算符

运算符/特殊字符

说明

/

此路径运算符出现在模式开头时,表示应从根节点选择。

//

从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。

.

当前上下文。

..

当前上下文节点父级。

*

通配符;选择所有元素节点与元素名无关。(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数)

@

属性名的前缀。

@*

选择所有属性,与名称无关。

:

命名空间分隔符;将命名空间前缀与元素名或属性名分隔。

( )

括号运算符(优先级最高),强制运算优先级。

[ ]

应用筛选模式(即谓词,包括"过滤表达式"和"轴(向前/向后)")。

[ ]

下标运算符;用于在集合中编制索引。

|

两个节点集合的联合,如://messages/message/to | //messages/message/cc

-

减法。

div,

浮点除法。

and, or

逻辑运算。

mod

求余。

not()

逻辑非

=

等于

!=

不等于

特殊比较运算符

< 或者 &lt;

<= 或者 &lt;=

> 或者 &gt;

>= 或者 &gt;=

需要转义的时候必须使用转义的形式,如在XSLT中,而在XMLDOM的scripting中不需要转义。

       二.XPath的谓词即筛选表达式

轴名称

结果

ancestor

选取当前节点的所有先辈(父、祖父等)

ancestor-or-self

选取当前节点的所有先辈(父、祖父等)以及当前节点本身

attribute

选取当前节点的所有属性

child

选取当前节点的所有子元素。

descendant

选取当前节点的所有后代元素(子、孙等)。

descendant-or-self

选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following

选取文档中当前节点的结束标签之后的所有节点。

namespace

选取当前节点的所有命名空间节点

parent

选取当前节点的父节点。

preceding

直到所有这个节点的父辈节点,顺序选择每个父辈节点前的所有同级节点

preceding-sibling

选取当前节点之前的所有同级节点。

self

选取当前节点。

                暂时的即先总结到这里啦,嘿嘿,对于XPath的一语法我只是初步的认识,但是熟练的掌握我还是要继续联系的,学习是要一直坚持的,友友们,加油加油!

posted @ 2015-04-12 14:39  雪?  阅读(996)  评论(1编辑  收藏  举报