使用 HTML Agility Pack 和 Linq 解析 html

2023-11-22

我有以下 HTML

(..)
<tbody>
 <tr>
  <td class="name"> Test1 </td>
  <td class="data"> Data </td>
  <td class="data2"> Data 2 </td>
 </tr>
 <tr>
  <td class="name"> Test2 </td>
  <td class="data"> Data2 </td>
  <td class="data2"> Data 2 </td>
 </tr>
</tbody>
(..)

我所拥有的信息是名称=>所以“Test1”和“Test2”。我想知道的是如何根据我拥有的名称获取“data”和“data”中的数据。

目前我正在使用:

var data =
    from
        tr in doc.DocumentNode.Descendants("tr")
    from   
        td in tr.ChildNodes.Where(x => x.Attributes["class"].Value == "name")
    where
        td.InnerText == "Test1"
    select tr;

但我得到{"Object reference not set to an instance of an object."}当我尝试查看时data


至于您的尝试,您的代码有两个问题:

  1. ChildNodes很奇怪 - 它还返回空白文本节点,该节点没有class属性(当然不能有属性)。
  2. 正如詹姆斯·沃尔福德(James Walford)评论的那样,文本周围的空格很重要,您可能需要修剪它们。

通过这两个更正,可以实现以下效果:

var data =
      from tr in doc.DocumentNode.Descendants("tr")
      from td in tr.Descendants("td").Where(x => x.Attributes["class"].Value == "name")
     where td.InnerText.Trim() == "Test1"
    select tr;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HTML Agility Pack 和 Linq 解析 html 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • Internet Explorer 中跨站点请求的访问控制

    我正在尝试从多个域向单个域发出 AJAX 调用来处理该请求 通过在处理服务器上设置标头 在 Firefox 和 Chrome 中启用跨域很容易 header Access Control Allow Origin 但这无助于在 Intern
  • 如何在 JSX 中添加自定义 html 属性

    背后有不同的原因 但我想知道如何简单地向 JSX 中的元素添加自定义属性 编辑 更新以反映 React 16 React 16 原生支持自定义属性 这意味着向元素添加自定义属性现在就像将其添加到render函数 就像这样 render re
  • 是什么导致异常中的递归原因?

    当在调试器中查看 Java 中的异常时 您经常会发现原因是无限递归的 我假设它是无限的 e g Exception1 Caused by gt Exception2 Caused by gt Exception2 Caused by gt
  • linux如何用同一个驱动程序驱动多个网卡?

    我最近在学习linux网络驱动 我想知道如果我的板上有很多相同类型的网卡 内核如何驱动它们 内核是否需要多次加载同一个驱动程序 我认为这是不可能的 insmod不会这样做 那么我怎样才能让所有同类卡同时工作呢 regards 每张卡的状态
  • 只显示 ng-repeat 的第一个元素

    如何仅显示角度中的第一个元素 我在用着ng repeat像这样 div div product price div div 但既然我不重复 那么我不必使用ng repeat 我怎样才能让它只显示第一个 而不必进入 ng repeat 您可能
  • 从 SQL Server 数据库获取“下一个”行并在单个事务中对其进行标记

    我有一个用作队列的 SQL Server 表 它正在由多线程 很快将成为多服务器 应用程序进行处理 我想要一种方法让进程从队列中声明下一行 将其标记为 进程中 而多个线程 或多个服务器 不可能同时声明同一行 有没有办法更新一行中的标志并同时
  • 让 CMake 为 MSVC 构建共享库 [重复]

    这个问题在这里已经有答案了 我一直在使用 CMake 在 Unix 环境中构建 C 和 C 项目 但是 我也想开始在 MSVC 中进行编译 并且我试图了解 cmake 文档 但我遇到了困难 当我尝试构建时 我不断收到以下消息 链接 致命错误
  • 将特定于页面的 Javascript 添加到 CakePHP 中的每个视图

    为了使我的脚本保持可维护性 我将把每个脚本移到自己的文件中 按控制器和操作组织 scripts which only apply to views posts add ctp app webroot js page posts add js
  • 如何让 Ansible 解释变量内的变量?

    每当我尝试让 Ansible 解释嵌套变量 即另一个变量中的变量 时 我都无法获得预期的结果 给定变量 key bar foo bar baz foo bar baz 我尝试过这三种方法 但动态访问密钥的运气不佳bar字典的foo或钥匙fo
  • QueryDSL 窗口函数

    如何使用窗口函数编写查询并选择 QueryDSL 中的所有字段 在文档中有一个这样的例子 query from employee list SQLExpressions rowNumber over partitionBy employee
  • 电子邮件:[Firebase] 客户端对 Cloud Firestore 数据库的访问权限将在 X 天后到期

    我收到一封电子邮件 表明我正在 测试模式 下进行开发 但它使我的数据库完全向互联网开放 我最初接受的默认规则如下所示 rules version 2 service cloud firestore match databases datab
  • Android 位图共享意图 - 是否可以在共享之前不保存它?

    我尝试使用共享意图从我的应用程序导出位图 而不保存临时位置的文件 我找到的所有例子都是两步的 1 保存到SD卡并为该文件创建Uri 2 用这个Uri开始意图 是否可以在不需要 WRITE EXTERNAL STORAGE 权限的情况下保存文
  • CListCtrl:如何保持滚动位置?

    我有一个 CListCtrl 报告样式 我可以在其中清除列表并在某些时间重新填充它 我想在执行此操作时保持垂直滚动位置 我发现有几种看起来很有前途的方法 EnsureVisible GetScrollPos SetScrollPos Get
  • 如何从预处理器宏中识别平台/编译器?

    我正在编写一个跨平台代码 它应该在linux windows Mac OS 上编译 在windows上 我必须支持visual studio和mingw 有一些特定于平台的代码 我应该将其放入 ifdef endif环境 比如这里我放置了w
  • 使用 Azure DevOps 管道的 AzureFileCopy 失败 - “AzCopy.exe 以非零退出退出

    我尝试将 ARM 模板复制到存储但失败 YML 可能出现什么问题 ERROR AzCopy AzCopy exe logout INFO Logout succeeded INFO AzCopy exe A newer version 10
  • 如何解决“资源”参数中的“重复项目”错误

    在处理我的项目时 我遇到了以下错误 在 资源 参数中多次指定了 项 资源 参数不支持重复项目 删除了项目名称 没关系 但是 我不知道如何解决这个问题 在 Visual C Express 中哪里可以找到此参数 我猜 项是一种形式 那么 从最
  • 替换部分超链接

    我需要修改 xls 工作簿中的大量超链接 我的链接是这样的 mysrv001 some path documents doc我需要更换 mysrv001 with mysrv002 我尝试了类似的操作 但收到错误 对象不支持此属性或方法 我
  • 如何使用 Python 图像库 (PIL) 识别非照片或“无趣”图像

    我有数千张图像 我需要剔除那些不是照片或其他 有趣 的图像 例如 无趣 的图像可能全部是一种颜色 或者大部分是一种颜色 或者是简单的图标 徽标 该解决方案不必是完美的 只要足以删除最不有趣的图像即可 到目前为止 我最好的想法是对像素进行随机
  • 匹配多种类型以实现模板专业化解析

    简单地忽略一个事实 即正常的函数重载将更好地服务于这个示例 它只是作为学习模板编程的一种方式 话虽如此 欢迎您评论与函数模板专业化相比 使用函数重载所获得的好处 差异 尽管这可能值得一个自己的问题 考虑以下示例 template
  • 使用 HTML Agility Pack 和 Linq 解析 html

    我有以下 HTML tbody tr td class name Test1 td td class data Data td td class data2 Data 2 td tr tr td class name Test2 td td