在这个问题中,假设第一个点之前的起始节点是.DocumentNode,输入HtmlAgilityPack.HtmlDocument
.SelectSingleNode("*[contains(.,'Year Interior:')]")
结果:
InnerHtml:<table width="822" height="173" class="diy-section-content-table adSpecView-section-content-body-container" border="1" cellspacing="0" cellpadding="0"><tbody><tr><td class="diy-section-content-table-td diy-template-column" valign="top"><ul><li><strong>Year Interior:</strong>2007</li><li>Good Condition</li></ul></td></tr></tbody>
我需要结果只是包含&#34;年内容的最后一个孩子:&#34;:
<li><strong>Year Interior:</strong>2007</li>
我搜索的Html不一致。 &#34;年度内部:&#34;可能在<li>,<span>,<td>,<div>, etc.
,这就是我在搜索中无法更明确的原因。
.SelectSingleNode("*[contains(.,'Year Interior:')]")
这样的内容怎么会只返回包含&#34;年内容的最后一个孩子:&#34;而不是容器元素?
当然,我不能这样做,但它显示了我需要的结果:
.SelectSingleNode("*/*/*/*/*/*/*[contains(.,'Year Interior:')]")
所需结果:InnerHtml:<strong>Year Interior:</strong> 2007
更新:
尝试以下操作是冗长的,接近工作,除了它捕获格式标记,如<strong>
和<em>
:
.Descendants() | Where-Object {$_.InnerHtml -like "*Year Interior:*" -and $_.HasChildNodes -eq $false}).ParentNode
在这种情况下,第一个父节点是强标记,因此代码将变得更加难以检查它是否是格式化标记。
答案 0 :(得分:1)
这个怎么样:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
doc.DocumentNode.Descendants().Where(_ => !string.IsNullOrEmpty(_.InnerText) && _.InnerText.Trim().Equals("Year Interior:"));