【问题标题】:Parsing html files using HtmlAgilityPack使用 HtmlAgilityPack 解析 html 文件
【发布时间】:2018-05-06 20:35:34
【问题描述】:

我有几个 Html 文件存储在同一个目录中(TestReport1.html、TestReport2.html....),内容如下:

<!DOCTYPE html>
<html>
  <body>
      <section class='summary'>
        <ul class='resultSummary'>
          <li class='Passed'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Passed</div>
              <span class='summaryCount'>199</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='Inconclusive'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Inconclusive</div>
              <span class='summaryCount'>10</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='NotImplemented'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Not Implemented</div>
              <span class='summaryCount'>5</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='Failed'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Failed</div>
              <span class='summaryCount'>12</span>
            </div>
            <input type='checkbox' class='cbx_toggle' checked/>
          </li>
          <li id='summaryChart'</li>
        </ul>
      </section>
    </body>
</html>

我想解析每个 html 文件并将每个节点列表中的值及其相关的存储值获取到类似这样的输出中:

测试报告1: 通过:199 不确定:10 未实施:5 失败:12

测试报告2: 通过:20 不确定:10 未实施:50 失败:120

然后我想将所有结果合并到一个单独的html摘要文件中:

总结测试报告: 通过总数:199 总无定论:10 未实施总数:5 失败总数:12

任何提示和想法都将不胜感激

【问题讨论】:

  • 您的问题似乎太宽泛了。您的程序的哪个部分有问题(枚举 html 文件、解析 html、从节点读取值等)?此外,您的问题应包括您迄今为止编写的代码的相关部分(请参阅How to create a Minimal, Complete, and Verifiable example) - 不要指望我们为您编写整个程序。

标签: c# html html-agility-pack


【解决方案1】:
// Description: HAP - Load (From File)
// Website: https://html-agility-pack.net/
// Run: https://dotnetfiddle.net/EsvZyg

// @nuget: HtmlAgilityPack

using System;
using System.Xml;
using HtmlAgilityPack;

public class Program
{
    public static void Main()
    {
        SaveHtmlFile();

        #region example

        var path = @"test.html";

        var doc = new HtmlDocument();
        doc.Load(path);

        var node = doc.DocumentNode.SelectSingleNode("//body");

        Console.WriteLine(node.OuterHtml);  

        #endregion
    }

    private static void SaveHtmlFile()
    {
        var html =
        @"<!DOCTYPE html>
<html>
<body>
    <h1>This is <b>bold</b> heading</h1>
    <p>This is <u>underlined</u> paragraph</p>
    <h2>This is <i>italic</i> heading</h2>
</body>
</html> ";

        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(html);

        htmlDoc.Save("test.html");
    }
}

【讨论】:

    【解决方案2】:

    要获取值,您可以使用 XPath。示例:

    "//*[@class='Inconclusive']/div/span"
    

    C# HtmlAgilityPack

    var html = new HtmlDocument();
    html.LoadHtml(<html code>);
    var xpath = "//*[@class='Inconclusive']/div/span";
    var parse = html.DocumentNode.SelectSingleNode(xpath).InnerText;
    

    如何获取 XPath:

    XPath Syntax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2016-11-20
      • 2010-12-03
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多