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。

有什么想法吗?

XPath查询不起作用

您可以简单地提及属性名称来选择具有特定属性集的元素。因此,您可以尝试通过以下方式获取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')]")