解析値HTML AgilityPack C#によるグループ
-
21-12-2019 - |
質問
グループデータのC#では、HTMLファイルを解析し、その上のすべてのデータを取得しました。
選択したそれらの線は親で、以下の子を含み、私が取り組んでいるコードはここにあります:
var uricontent = File.ReadAllText("TestHtml/Bew.html");
var doc = new HtmlDocument(); // with HTML Agility pack
doc.LoadHtml(uricontent);
var rooms = doc.DocumentNode.SelectNodes("//table[@class='rates']").SelectMany(
detail =>
{
return doc.DocumentNode.SelectNodes("//td[@class='rate-description'] | //table[@class='rooms']//h2 | //table[@class='rooms']//td[@class='room-price room-price-total']").Select(
r => new
{
RoomType = r.InnerText.CleanInnerText(),
});
}).ToArray();
.
html agilitypackによって解析されたデータを含み、あなたはPay&Saveのような名前でそれらをグループ化することができます。
HTMLファイルはここにあります。 http://tepad.cc/share/g0zh0tcyag
解決
3 XPathクエリの合体を実行する代わりに、それらを「Rate Description」(AKA by Element:<td class="rate-description">
)で再度グループ化しようとしています。
LINQの選択を「Rate Description」でベース化することができ、次に投影部分で、相対XPathを使用して現在の "Rate Description"の下のすべての部屋タイプと室利率を取得できます。
var rooms =
doc.DocumentNode
.SelectNodes("//table[@class='rates']//tr[@class='rate']")
.Select(r => new
{
RateType = r.SelectSingleNode("./td[@class='rate-description']")
.InnerText.CleanInnerText,
RoomTypes = r.SelectNodes("./following-sibling::tr[@class='rooms'][1]//table[@class='rooms']//h2")
.Select(s => new
{
RoomType = s.InnerText.CleanInnerText,
Rate = s.SelectSingleNode(".//parent::td/following-sibling::td[@class='room-price room-price-total'][1]")
.InnerText.CleanInnerText
}).ToArray()
}).ToArray();
.
上記のXPathクエリの先頭の通知期間。これにより、照会が現在のHtmlAgilityPack
からの相対的なものであることをHtmlNode
に指示します。結果は次のようになります。
所属していません StackOverflow