zoukankan      html  css  js  c++  java
  • ASP.NET MVC

    HtmlAgilityPack

    使用HtmlAgilityPack可以以面向对象的方式通过查找Html节点来获取页面元素。参考:http://html-agility-pack.net

    HtmlDocument类

    //方法
    LoadHtml(string content);
    //加载Html数据

    CreateNode(string html)
    //创建一个HtmlNode

    CreateAttribute(string attriName, string attriVal)
    //创建一个属性

    CreateTextNode(string text)
    //创建文本

    //其它参考:http://html-agility-pack.net/utilities和http://html-agility-pack.net/writer

    //属性
    DocumentNode
    //得到根节点,返回一个HtmlNode
    HtmlNode类
    //方法
    SelectNodes(string xPath)
    //获取xPath指定的节点集合

    SelectSingleNode(string xPath)
    //获取xPath指定的节点集合中的第一个节点

    SetAttributeValue(HtmlAttribute attri | string attriName, string attriVal)
    //修改当前节点的属性

    PrependChild(HtmlNode node)
    //在当前节点中的开始处插入新的子节点

    AppendChild(HtmlNode node)
    //在当前节点中的末尾处插入新的子节点

    PrependChildren(HtmlNode node)
    //在当前节点中的开始处的子节点的开始处插入后代节点

    AppendChildren(HtmlNode node)
    //在当前节点中的末尾处的子节点的末尾处插入后代节点

    InsertAfter(HtmlNode node)
    //在当前节点后面插入新节点,类似的有insertBefore

    Remove()
    //移除自身

    RemoveAll()
    //移除自身包含的所有节点

    RemoveAllChildren()
    //移除自身包含的所有节点

    RemoveChild(HtmlNode oldChild | HtmlNode oldChild, bool keepGrandChildren)
    //keepGrandChildren:是否深度移除后代节点
    //移除自身包含的由参数指定的节点

    ReplaceChild(HtmlNode newChild, HtmlNode oldChild);
    //在当前节点中,用newChild替换oldChild

    Clone()
    //创建副本

    CloneNode(bool deep | string name | string name, bool deep)
    //deep:是否深度克隆,如果是false,则只克隆节点自身
    //name:克隆的同时修改节点的标签名称,比如克隆H1的内容同时改掉结果节点的名称为H2

    CopyFrom(HtmlNode node | HtmlNode node, bool deep)
    //deep:是否深度拷贝,如果是false,则只拷贝节点自身
    //从参数指定的节点处复制其包含的所有节点

    Element()
    //在当前节点中根据参数指定的名称获取一个子节点,返回单个HtmlNode

    Elements()
    //在当前节点中根据参数指定的名称获取子节点集合,返回IEnumerable<HtmlNode>集合

    Ancestors(string name)
    //获取当前节点的由参数指定的名称的祖先节点,如果参数为空则获取当前节点的所有祖先节点的集合,类似的有AncestorsAndSelf()、AncestorsAndSelf(string name)

    Descendants(string name)
    //获取当前节点的由参数指定的名称的后代节点,如果参数为空则获取当前节点的所有后代节点的集合,类似的有DescendantsAndSelf()、DescendantsAndSelf(string name)

    DescendantNodes()
    //获取所有后代节点,类似的有DescendantNodesAndSelf()

    //属性
    InnerHtml
    //设置或获取当前节点所包含的元素节点

    InnerText
    //设置或获取当前节点所包含的文本

    OuterHtml
    //获取当前节点所包含的所有代码

    ParentNode
    //获取当前节点的父节点

    ChildNodes
    //获取所有子节点,类似的有FirstChild、LastChild、NextSibling、ParentNode

    HtmlAttribute类

    //方法
    Add(HtmlAttribute attri | string attriName, string attriVal)
    //添加一个属性,类似的有Append()

    Remove(string attriName)
    //此方法需要属性集合调用,移除节点的由参数指定的属性,如果参数为空则移除所有属性,类似的有RemoveAll()、RemoveAt(int index)

    例子:

    private void Test()
    {
        HtmlDocument doc = new HtmlDocument();
        //三种方式创建Html对象

        //第一种:
        //System.IO.StreamReader reader = System.IO.File.OpenText(url);
        //doc.LoadHtml(reader);

        //第二种:
        //doc.LoadHtml(url); 如果使用Load(url)会出现提示文档包含非法字符

        //第三种:
        //string htmlText = "<div>xxx</div>";
        //doc.LoadHtml(htmlText);
               
        string url = "http://www.weather.com.cn/weathern/101040100.shtml";
        WebClient wc = new WebClient();
        wc.Encoding = Encoding.GetEncoding("utf-8");
        string content = wc.DownloadString(url);

        doc.LoadHtml(content);
        HtmlNode root = doc.DocumentNode; //得到根节点
        var div= root.SelectNodes("//div").Where(d => d.InnerText.Contains("sam")).SingleOrDefault();
    }

    附:移除注释

    foreach (var comment in doc.DocumentNode.SelectNodes("//comment()").ToArray())
    {
        comment.Remove();//新增的代码
    }
  • 相关阅读:
    Codeforces
    Codeforces
    SCUT
    Codeforces
    Codeforces
    poj 2229 Sumsets(类似于n的m划分)
    poj 1742 Coins(多重背包)
    hdu 2159FATE(完全背包)
    NOIP 普及组 2014 比例简化
    2018.10.2浪在ACM 集训队第三次测试赛
  • 原文地址:https://www.cnblogs.com/myrocknroll/p/8051828.html
Copyright © 2011-2022 走看看