zoukankan      html  css  js  c++  java
  • 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 + "
    ";
                    num = 0;
                }
                //常见文件,把要输出的内容输出在Excel文件中
                File.AppendAllText(@"F:公司Xpath	ablepath.xls", tableText, System.Text.Encoding.Default);
            }
            foreach (HtmlNode td in tdList)
            {
                string tdText = td.InnerText;
                tdText = tdText + "         ";
                num++;
                if (num == 13)
                {
                    tdText = tdText + "
    ";
                    num = 0;
                }
                File.AppendAllText(@"F:公司Xpath	ablepath.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的一语法我只是初步的认识,但是熟练的掌握我还是要继续联系的,学习是要一直坚持的,友友们,加油加油!

  • 相关阅读:
    nodejs内存溢出解决方法
    mongodb副本集与分片结合
    node加密
    守护进程,互斥锁,IPC,队列,生产者与消费者模型
    并发编程
    粘包问题
    socket编程
    xml模块
    网络编程
    异常处理
  • 原文地址:https://www.cnblogs.com/dyxd/p/4419475.html
Copyright © 2011-2022 走看看