0
私はC#でHtmlの敏捷性パックを使用して、各
<li>
テキストとリンク値を取得したいと私はそれぞれ
<li>
リンク
ABCのWebページから<div>
と<h1>
の値を必要とし、さらに
でのNULLの例外.COM/one.html、 & 私は、実行時にこのエラーを取得していC#とHtmlの敏捷性パック:ネストされたforeachループ
abc.com/three.html abc.com/two.html:
System.ArgumentNullException:値にnullを設定することはできません。
[ArgumentNullException: Value cannot be null. Parameter name: second]
System.Linq.Enumerable.Zip(IEnumerable`1 first, IEnumerable`1 second, Func`3 resultSelector) +2619657
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnLoad(EventArgs e) +95
System.Web.UI.Control.LoadRecursive() +59
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678
HTML
<ul>
<li>ListOne<a href="abc.com/one.html"></a></li>
<li>ListTwo<a href="abc.com/two.html"></a></li>
<li>ListThree<a href="abc.com/three.html"></a></li>
</ul>
C#
string Url = "WebAddress1";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
foreach (var item in doc.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/ul[1]/li").Zip(doc.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/ul[1]/li/a"), (a, b) => new { A = a, B = b }))
{
var a = item.A;
var b = item.B;
ListBox1.Items.Add(a.InnerText);
ListBox2.Items.Add(b.GetAttributeValue("href", ""));
string Url2 = "WebAddress1" + b.GetAttributeValue("href", "");
HtmlWeb web2 = new HtmlWeb();
HtmlDocument doc2 = web2.Load(Url2);
foreach (var item2 in doc2.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/article/div[4]/div[1]").Zip(doc2.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/article/h1"), (c, d) => new { C = c, D = d }))
{
var c = item2.C;
var d = item2.D;
ListBox3.Items.Add(c.InnerText);
ListBox4.Items.Add(d.InnerText);
}
}
*注:このコードは、Webページの一部の要素のたxPathで動作します。abc.com/one .html,abc.com/two.htmlおよびabc.com/three.html
これをデバッグしようとしましたか?例外は、ZipメソッドのパラメータがNULLであり、サポートされていないことを示します。 –
'doc2.DocumentNode.SelectNodes(" // * @ id = \ "pageContent \"]/article/h1 ")'指定された 'id'で' article'要素の 'h1'要素を抽出します。 't one。 –
2番目の 'foreach'ループを最初の' foreach'ループの外側に置き、 'Url2'で同じリンクを提供していれば、その作業を行います。例外は、ネストされた 'foreach'ループを使用する場合にのみ発生します。 また、上記のネストされたコードは、ナビゲーションバーのxPath – Shady