【问题标题】:Find any inntertext have custom prefix HtmlAgilityPack查找任何具有自定义前缀 HtmlAgilityPack 的互文
【发布时间】:2016-08-16 22:51:10
【问题描述】:

我有这样的列表名称文件 html:

<tr>
<td>ABC.rar</td>
<td>XYZ.zip</td>
<td>DEF.MP4</td>
</tr>

如何找到文件 ABC.rar 只需添加前缀 ABC

string innerText = document2.DocumentNode.SelectSingleNode("//td[2]//a[.='ABC']").InnerText;

【问题讨论】:

  • 你的正则表达式应该是/([A-Z]+\.rar)/g
  • @shayanypn 这不是正则表达式,而是 XPATH。

标签: c# html xpath html-agility-pack


【解决方案1】:

不清楚为什么您尝试的 XPath 中有 a 而示例 HTML 中没有 &lt;a&gt; 元素。无论如何,以下是两个可能的 XPath 来查找包含关键字 'ABC'&lt;td&gt;

//td[contains(.,'ABC')]
//td[starts-with(.,'ABC')]

如果使用了明确的函数名称,两者之间的区别应该是不言自明的。如果我正确理解 prefix 的意思,我怀疑在这里starts-with()contains() 更合适。


演示:

var html = @"<tr>
<td>ABC.rar</td>
<td>XYZ.zip</td>
<td>DEF.MP4</td>
</tr>";

var document2 = new HtmlDocument();
document2.LoadHtml(html);
string innerText = document2.DocumentNode
                            .SelectSingleNode("//td[starts-with(.,'ABC')]")
                            .InnerText;
Console.WriteLine(innerText);

dotnetfiddle demo

输出:

ABC.rar

【讨论】:

  • @AvinashRaj . 引用当前上下文节点,在本例中为td,当用于字符串操作(例如contains()starts-with() 函数)时,上下文节点将为隐式转换为字符串,就好像调用了 string() 函数
  • 添加您的代码后,它显示错误:对象引用未设置为对象的实例
  • @HuongPham 这意味着您的 HTML 与发布的不同。查看演示,它应该可以工作。
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 2017-01-18
  • 2020-04-29
  • 1970-01-01
  • 2021-11-01
  • 2021-03-31
  • 2019-02-04
  • 1970-01-01
相关资源
最近更新 更多