2013-09-26 22 views
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列的內容消失了!爲什麼?

我已經嘗試過很多事情,並且爲什麼會丟棄該列的內容。 其他列包含它保留的內容。那麼日期欄有什麼問題?

是否有某種設置或屬性導致或防止丟棄內容?

即使您沒有線索有什麼問題,但有一些方法可以更多地進行調查。

+2

你可能會得到不同的行比你想要的...嘗試使Html非常簡單,所以它只是在你想要匹配的行... –

+0

@Alexei你是對的。我認爲這些行的返回順序與HTML相同。他們可以隨機排列嗎? – Wayne

+0

@Alexei我得到的行有 Wayne

回答

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屬性會起作用 - 不能看到你的整個輸入文件。

+1

你的答案是現貨。我其實需要所有的行,所以你的答案是完美的。其實我自己已經找到了這個,但會標記你的正確答案。 – Wayne