XPath查询不起作用
本文关键字:不起作用 查询 XPath | 更新日期: 2023-09-27 17:58:07
你好,我制作了HttpWebResponse,并获得了包含我需要的所有数据的HtmlPage,例如,包含日期信息的表,我需要将它们保存到数组列表中,并将其保存到xml文件中
html页面示例
<tbody>
<tr class="odd">
<tr class="even">
<td class="padding5 sorting_1">
<span class="DateHover" sort="14/03/18/22/56" title="18.03.14" ref="18.03.14">18.03.14</span>
</td>
<td class="CellStyleDefaultText">
<span class="transSpan">Info</span>
</td>
<td class="CellStyleDefaultText" title="UserNumber123">UserNumber123</td>
<td class="CellStyleSignedNumber floatopHomePage">
<span title="701,554.23 ">701,554.23 </span>
</td>
<td class="CellStyleAmount CellStyleAmountNew">
<div title="-3354999.71">-3354999.71</div>
</td>
<td class="CellStyleDetails CCMoreDetailsTd">
<span> 17.03.14 Info</span>
</td>
</tr>
</tbody>
好的,第一个跨度与日期时间我得到
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span[@class='DateHover']"))
带信息的跨度
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='transSpan']"))
然后我坚持得到UserNumber123,我做了这个
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='CellStyleDefaultText']"))
但它也会返回我的跨度transSpan,因为它在td 中
以及我无法获得的所有其他td CellStyleSignedNumber、CellStyleMount和CellStyleDetails。
有什么想法吗?
您可以简单地提及属性名称来选择具有特定属性集的元素。因此,您可以尝试通过以下方式获取UserNumber123
:
doc.DocumentNode.SelectNodes("//td[@class='CellStyleDefaultText' and @title]")
在XPath之上,选择具有title属性且类属性值等于"CellStyleDefaultText"的<td>
元素。
对于其余的<td>
,请尝试使用XPath contains()
函数,例如:
doc.DocumentNode.SelectNodes("//td[contains(@class,'CellStyleSignedNumber')]")
更新:
响应您评论的后一部分,如果您打算获得具有子<span>
元素的<td>
,您可以添加如下简单的条件:
doc.DocumentNode.SelectNodes("//td[span and contains(@class,'CellStyleSignedNumber')]")