2017-03-23 7 views
0

私はHtmlAgilityPackを使用して、Webサイト上のすべてのアイテム、色、製品へのリンクを検索しています。私は自分のアプリケーション内に名前と色を入力して、ウェブサイト上のアイテムを見つけることができるようにしたいと考えています。 アプリケーションはアイテム名のみを使用してアイテムを見つけ、その名前のウェブサイト上で最後のものを返します。 同じ名前の複数の商品がありますが、それぞれ異なる色をしています。C# - パブリックストリングはコレクションの外の最後の値のみを格納します

色は別のコレクションに格納されているため、別のXPathに含まれているため、色を含むと問題が発生します。あなたが継続的にループ内でテキストボックスのTextプロパティを設定しているので、これは(ので、各項目は継続的に、前に上書きされます)です

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[contains(@class,'inner-article')]//h1//a"); 
HtmlNodeCollection collection2 = doc.DocumentNode.SelectNodes("//*[contains(@class,'inner-article')]//p//a"); 


foreach (var node2 in collection2) 
{ 
string coloursv = node2.InnerHtml.ToString(); 
strColour = coloursv; 

//txtLog.Text += Environment.NewLine + (DateTime.Now.ToString("hh:mm:ss")) + str; - This code returns all colours (If code is ran outside of collection then only last colour in string is returned. 

} 

foreach (var node in collection) 
{ 
string href = node.Attributes["href"].Value; 
var itemname = node.InnerHtml.ToString(); 

if (itemname.Contains(txtKeyword.Text)) 
{ 
txtLog.Text = (DateTime.Now.ToString("hh:mm:ss")) + " - Item Found: " + href + " " + itemname + " " + strColour; //Successfully returns item name, colour and link but always gives last availible on website 
} 
} 

答えて

0

:ここ

は私のコードです

foreach (var node in collection) 
{ 
    // Omitted for brevity 

    // This will continually overwrite the contents of your Text property 
    txtLog.Text = ...; 
} 

複数のアイテムを保存する場合は、コレクションオブジェクト(ListBoxなど)に結果を格納するか、値をテキストボックスに連結するだけです。

foreach (var node in collection) 
{ 
    // Omitted for brevity 
    var stringToAdd = ...; 
    txtLog.Text += stringToAdd + Environment.NewLine; 
} 

また、もう少し効率的にStringBuilderクラスを使用することによって、これを達成することができます動作しますが、問題はそれだけですべてを返すことである

StringBuilder sb = new StringBuilder(); 
foreach (var node in collection) 
{ 
    // Omitted for brevity 
    var stringToAdd = ...; 
    // Append this item to the results 
    sb.AppendLine(stringToAdd); 
} 

// Store the results 
txtLog.Text = sb.ToString(); 
+0

感謝を。何らかの理由でそれは私が一致を探して、同じ名前と色を持つ一致するアイテムを返すことはできません。 – Andre

関連する問題