下面是用于筛选经济日历的代码摘录。它使用 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 选择第一行 tr 的代码:
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 列的内容消失了!为什么?
我已经尝试了很多东西,并困惑为什么它会删除该专栏的内容。其他列具有它保留的内容。那么日期列有什么问题呢?
是否有某种设置或属性会导致或防止内容丢失?
即使您不知道出了什么问题,但有一些建议可以进一步调查它。
就像@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
属性会起作用 - 没有看到整个输入文件就无法判断。