1
下面您會看到一段代碼,用於篩選經濟日曆。 它使用XPath解析的HTML頁面包含此行,作爲表中的第一個排列 。 (僅粘貼整個HTML頁面的此行來代替。)XPath在HTML頁面上刪除td列的內容以進行屏幕抓取
<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列的內容消失了!爲什麼?
我已經嘗試過很多事情,並且爲什麼會丟棄該列的內容。 其他列包含它保留的內容。那麼日期欄有什麼問題?
是否有某種設置或屬性導致或防止丟棄內容?
即使您沒有線索有什麼問題,但有一些方法可以更多地進行調查。
你可能會得到不同的行比你想要的...嘗試使Html非常簡單,所以它只是在你想要匹配的行... –
@Alexei你是對的。我認爲這些行的返回順序與HTML相同。他們可以隨機排列嗎? – Wayne
@Alexei我得到的行有
回答
像@AlexeiLevenkov提到的,你必須選擇一個不同於你想要的行。你修剪過多的本質問題之遙的努力簡化,但它仍然清楚什麼是錯的......
考慮您的輸入文檔可能基本上是這樣的:
測試
@class="calendar_row"
將不會與您展示的tr
相匹配,但會與第一排相匹配。您可以改爲將您的測試更改爲
contains(@class,'calendar_row')
,但這樣會匹配兩行。你將不得不確定一些你想要的行所特有的內容或屬性。也許@data-eventid
屬性會起作用 - 不能看到你的整個輸入文件。來源
2013-09-27 02:03:28 kjhughes
你的答案是現貨。我其實需要所有的行,所以你的答案是完美的。其實我自己已經找到了這個,但會標記你的正確答案。 – Wayne
相關問題