1

您可以在下面找到用于筛选经济日历的代码摘录。它使用 XPath 解析的 HTML 页面包括该行作为表中的第一行。(只粘贴这一行而不是整个 HTML 页面。)

<tr class="calendar_row newday singleevent" data-eventid="42064"> <td class="date"><div class="date">Sun<div>Dec 23</div></div></td> <td class="time">All Day</td> <td class="currency">JPY</td> <td class="impact"> <div title="Non-Economic" class="holiday"></div> </td> <td class="event"><div>Bank Holiday</div></td> <td class="detail"><a class="calendar_detail level1" data-level="1"></a></td> <td class="actual"> </td> <td class="forecast"></td> <td class="previous"></td> <td class="graph"></td> </tr>

这段代码使用 XPath 选择第一行:

var doc = new HtmlDocument();
doc.Load(new StringReader(html));
var rows = doc.DocumentNode.SelectNodes("//tr[@class=\"calendar_row\"]");
var rowHtml = rows[0].InnerHtml;

问题是 rowHtml 返回这个:

<td class="date"></td> <td class="time">All Day</td> <td class="currency">EUR</td> <td class="impact">  <div title="Non-Economic" class="holiday"></div>  </td> <td class="event"> <div>French Bank Holiday</div> </td> <td class="detail"><a class="calendar_detail level2" data-level="2"></a></td> <td class="actual"> </td> <td class="forecast"></td> <td class="previous"></td> <td class="graph"></td>

现在您可以看到日期的 td 列的内容消失了!为什么?

我已经尝试了很多东西,并且很难理解为什么它会删除该列的内容。其他列有它保留的内容。那么日期列有什么问题呢?

某处是否存在某种设置或属性来导致或防止内容丢失?

即使您不知道出了什么问题,但有一些关于如何进行更多调查的建议。

4

1 回答 1

2

就像@AlexeiLevenkov 提到的那样,您必须选择与您想要的不同的行。为了简化您已经删除了太多基本问题,但仍然很清楚出了什么问题......

考虑到您的输入文档可能基本上如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<table>
  <tr class="calendar_row" data-eventid="12345">
    <td>This IS NOT the tr you're looking for</td>
  </tr>
  <tr class="calendar_row newday singleevent" data-eventid="42064">
    <td>This IS the tr you're looking for</td>
  </tr>
</table>

该测试@class="calendar_row"不会与tr您显示的内容匹配,但会与第一行匹配。

您可以将您的测试改为contains(@class,'calendar_row')改为,但这将匹配两行。您将不得不识别一些您想要的行独有的内容或属性。也许该@data-eventid属性会起作用——如果不查看整个输入文件就无法判断。

于 2013-09-27T02:03:28.420 回答