0

HTML ドキュメントがあり、そこから必要な情報を取得したいので、HTML アジリティの概念を使用しています。次のコードを使用して、必要なすべてのデータを取得しています。

  var web = new HtmlWeb();
    var doc = web.Load("http://www.talentsearchpeople.com/en/jobs/?page=joblisting&pubID=&formID=&start=0&count=8&module=&functionLevel1=&provinceNode=&countryNode=&keyword=");

    var nodes = doc.DocumentNode.SelectNodes("//a[@class='grijs'][@title]");

    foreach (var node in nodes)
    {
        HtmlAttribute att = node.Attributes["title"];
        title = att.Value;
        Response.Write("<br/>" + att.Value);

    }




    var Location = doc.DocumentNode.SelectNodes("//td[@width='80']");

    foreach (var node in Location)
    {
        if (node.InnerHtml.Contains("Location:"))
        {
            locationname = HttpUtility.HtmlDecode(node.NextSibling.NextSibling.InnerText.Trim());

            Response.Write("<br/>Location1=" + locationname);

        }
    }

上記のコードを使用すると、次の出力が得られます。

**リードバイヤー南

ネイティブレベルのドイツ語による顧客サービス注文管理

EMEA カスタマー エクスペリエンス & クオリティ インターンシップ

ドイツ語とフランス語が堪能なサービスデスクチームリーダー

ネイティブレベルのフランス語を持つ調達および調達コンサルタント

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。

Location1=アルメリア

Location1=テラサ

Location1=イギリス、マンチェスター

Location1=バルセロナ

Location1=バルセロナ

Location1=ア・コルーニャ

Location1=カタルーニャ

Location1=ムルシア **

上記のコードは、データのフェッチに対して正しく機能します。問題は、上記のデータをデータベースに挿入し、データを正しい形式で表示したいということです。これは、プロパティの最初のタイトルとその場所が続くことを意味します **リードバイヤー南 Location1=Almeria

ドイツ語のネイティブ レベルのカスタマー サービス注文管理 Location1=Terrassa

EMEA カスタマー エクスペリエンス & クオリティ インターンシップ 場所 1=イギリス、マンチェスター

ドイツ語とフランス語の優れたレベルを持つサービス デスク チーム リーダー Location1=Barcelona

フランス語のネイティブ レベルの調達および調達コンサルタント Location1=Barcelona

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。Location1=ア・コルーニャ

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。Location1=カタルーニャ

Jefe/a de ventas con alemán e inglés. タイトルを受け取ります。Location1=ムルシア**

テーブルタグ検索による代替方法

 var web = new HtmlWeb();
    var doc = web.Load("http://www.talentsearchpeople.com/en/jobs/?page=joblisting&pubID=&formID=&start=0&count=8&module=&functionLevel1=&provinceNode=&countryNode=&keyword=");
    var mainNode = doc.DocumentNode.SelectNodes("//table[@class='border-jobs']/*");
    foreach (var mainNodes in mainNode)
    {
        string pathdet = mainNodes.XPath;
        var nodes = mainNodes.SelectSingleNode("//a[@class='grijs'][@title]");
        if (nodes != null)
        {
            HtmlAttribute att = nodes.Attributes["title"];
            title = att.Value;
            Response.Write("<br/>" + att.Value);
        }


        var Description = doc.DocumentNode.SelectSingleNode("//td[@colspan='2']");
        if (Description.InnerHtml.Contains("Description:"))
        {
            s = Description.InnerHtml;
            s = s.Replace("Description:", "");
            Response.Write("<br/>Description=" + s);
        }


        var Location = doc.DocumentNode.SelectSingleNode("//td[@width='80']");


        if (Location.InnerHtml.Contains("Location:"))
        {
            locationname = HttpUtility.HtmlDecode(Location.NextSibling.NextSibling.InnerText.Trim());

            Response.Write("<br/>Location1=" + locationname);

        }
    }

上記のコードを使用すると、次の出力が得られます。

スペイン語と英語に堪能なアシスタント コール センター マネージャー

説明= ポルトガルのリスボンに拠点を置く多国籍企業のアシスタント コール センター マネージャーを募集しています。この人は、チームの管理を担当します。コンタクトセンター、環境を中心としたチームマネジメントの経験が必要です。

Location1=リスボン、ポルトガル

//table[@class='border-jobs']/*タグがドキュメント内で 8 回発生するため、上記の出力が 8 回得られます。

どうすれば正しい出力を得ることができますか?

4

2 に答える 2

0

答えがわかりました。:) // は、テーブル内のものではなく、ページ全体の最初の td[@colspan='2'] を返すため。XPath "." の使用 式の前で現在のノードが選択されるため、var Description = mainNodes.SelectSingleNode(".//tr//td//table//tr//td[@colspan='2']"); mainNodes ノードの子孫のみが選択されます。

于 2013-11-15T05:54:54.487 に答える