XPath查询无法正常工作

时间:2014-04-14 08:19:14

标签: c# asp.net xpath

您好我制作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>

好了第一次使用dateTime我得到了

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,CellStyleAmount,CellStyleDetails我无法得到。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以简单地提及属性名称以选择具有特定属性集的元素。因此,您可以尝试以这种方式获取UserNumber123

doc.DocumentNode.SelectNodes("//td[@class='CellStyleDefaultText' and @title]")

高于XPath意味着,选择具有title属性的<td>元素,并且hass类属性值等于'CellStyleDefaultText'。

对于其余的<td>,请尝试使用XPath contains()函数,例如:

doc.DocumentNode.SelectNodes("//td[contains(@class,'CellStyleSignedNumber')]")

更新:

回复评论的后半部分,如果您打算获得具有子<td>元素的<span>,则可以添加以下简单条件:

doc.DocumentNode.SelectNodes("//td[span and contains(@class,'CellStyleSignedNumber')]")