2012-11-04 39 views
0

我有以下的HTML代碼HTML敏捷包,不能選擇一個節點

<a href="http://www.google.de/products/catalog?hl=de&amp;newwindow=1&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223&amp;sa=X&amp;ei=8nWWUOvADonntQbP3IHgDw&amp;ved=0CEgQ8gIwAA" class="psliimg" target="_blank"> 
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" alt="iittala Aalto Vase apfelgrün 16cm"> 
</a> 

basicly其

<a href="" class="" target=""><img src="" alt=""></a> 

使用HTML敏捷性包我不能讓一個節點具有以下xpath

//a[@class="psliimg] 

但我能夠通過選擇它的子女<img>得到它,但是當我嘗試acce ss除了href之外的其他任何屬性,它永遠不會工作如果我嘗試獲得屬性的數量,它會給我一個,即使有3!

這裏是原來的link所以你可以測試,這可能是什麼原因造成的?

回答

1

你想從你發佈的htlm代碼中得到什麼?

我跑過去試圖測試自己並得到相同的錯誤。所以我在下面運行這段代碼,寫入控制檯的文本甚至不包含屬性class = psliimg,所以我不確定在從頁面讀取原始html代碼和HAP如何處理它之間發生了什麼。

Sub Main() 
    Dim web As HtmlWeb = New HtmlWeb 
    Dim doc As HtmlDocument = web.Load("https://www.google.de/search?hl=de&tbm=shop&q=6411920054105&oq=6411920054105&gs_l=products-cc.12...3450.3450.0.4463.1.1.0.0.0.0.334.334.3-1.1.0...0.0...1ac.1.fBfILtFfII0") 

    Dim str = doc.DocumentNode.SelectSingleNode("//a[contains(@href,'12216375657503902223')]").ParentNode.InnerHtml 
    'The long munber is contained in the html line and is just used to identify the node I want to select. 
    Console.WriteLine(Str) 
    Console.ReadKey() 
End Sub 

這裏是輸出:

<a href="http://www.google.de/products/catalog?hl=de&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223"> 
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" alt="iittala Aalto Vase apfelgrün 16cm" height="90" width="90"> 
</a> 

所以,不幸的是你可能不得不xpath代碼工作,你的是什麼上面而不是什麼網站是說,請糾正我,如果我錯了。

您還可以遍歷每個節點並選擇您喜歡的內容。

For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//a[@href]") 
     'Console.WriteLine(link.ParentNode.InnerHtml) 
    Next 

對不起不是一個真正的答案,但不知道張貼代碼段最好的辦法。