1

次のようなhtmlファイルがあります。

<h3>
    <div id='type'>
        Type 1
    </div>

    <div id='price'>
        127.76;
    </div>
</h3>

 <h3>
    <div id='type'>
        Type 2
    </div>

    <div id='price'>
        127.76;
    </div>
</h3>

今、私は CSQuery を使用して、これらのタイプと価格をリストに抽出したいと考えています。ここに私が取り組んでいるコードがあります:

var doc = CQ.Create(htmlfile);

var types= (from listR in doc["<h3>"] //get the h3 tag
    select new TypeTest
    {
        Typename =  listR.GetAttribute("#type"),
        Price = listR.GetAttribute("#price")
    }
    ).ToList();
return types;

ただし、h3 としたときの doc[] の値がよくわからないため、思い通りに詳細を取得できませんでした。html ファイルは変更できません。

4

1 に答える 1

1

解析している html の形式が無効です。つまり、同一の ID が複数あります。( と の 2 つがありid='type'ますid='price)、次の手順を実行する必要があります。

  1. ドムをロードする
  2. type div と price div のコレクションを別々にロードします。
  3. Zip 関数を使用してそれらを結合し、TypeTestオブジェクトに投影します。

以下は実際の例です。

// 1
var doc = CQ.Create(html);

// 2
var typeDivs = doc["h3 > div#type"];
var priceDivs = doc["h3 > div#price"];

// 3
var types = typeDivs.Zip(priceDivs, (k, v) => new { k, v })
     .Select(h => 
      new TypeTest { Typename = h.k.InnerText.Trim(), 
      Price = h.v.InnerText.Trim() });
于 2014-03-05T10:19:04.163 に答える