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的一语法我只是初步的认识,但是熟练的掌握我还是要继续联系的,学习是要一直坚持的,友友们,加油加油!

  • 相关阅读:
    JAVA基础——编程练习(二)
    JAVA基础——面向对象三大特性:封装、继承、多态
    JVM内存
    50. Pow(x, n) (JAVA)
    47. Permutations II (JAVA)
    46. Permutations (JAVA)
    45. Jump Game II (JAVA)
    43. Multiply Strings (JAVA)
    42. Trapping Rain Water (JAVA)
    41. First Missing Positive (JAVA)
  • 原文地址:https://www.cnblogs.com/dyxd/p/4419475.html
Copyright © 2011-2022 走看看