在这个问题上,假设第一个点之前的起始节点是.DocumentNode,类型HtmlAgilityPack.HtmlDocumentHtmlAgilityPack如何通配符搜索选择最后一个子
.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>
我需要的结果是只包含“Year Interior:”的最后一个孩子:
<li><strong>Year Interior:</strong>2007</li>
我正在搜索的Html不一致。 “年份内部:”可能在<li>,<span>,<td>,<div>, etc.
,这就是为什么我不能在搜索中更明确。
像.SelectSingleNode("*[contains(.,'Year Interior:')]")
这样的东西怎么会只返回最后一个包含“Year Interior:”的子元素而不是容器元素?
当然,我不能做到这一点,但它显示了结果,我需要: .SelectSingleNode("*/*/*/*/*/*/*[contains(.,'Year Interior:')]")
所需结果:innerHTML的:<strong>Year Interior:</strong> 2007
UPDATE: 尝试以下是啰嗦,靠近工作除了它捕获格式的标记,如<strong>
和<em>
:
.Descendants() | Where-Object {$_.InnerHtml -like "*Year Interior:*" -and $_.HasChildNodes -eq $false}).ParentNode
在这种情况下,第一个父节点是强标记,因此代码将变得更加难以检查它是否是格式标记。
我更新根据您提出的答案的问题,筛选后代。它更接近。 – STWilson
所以你不想格式化标签或你做? –
如果你不想要,你可以将这个条件添加到Where语句'&& _.Name.Equals(HtmlNodeType.Text)' –