別のWebサイトに基づいてhtmlドキュメントを読み取り、グループ化し、並べ替えるクラスを構築しようとしています。
今まで持っていたものを展示します。これがウェブページがどのように構築されるかのサンプルです(それはまさに「どのように」構築されるかを覚えておいてください、私は全部を書き直しました):
<tr>
<td id="ab100_ab100_ab100_Main_Sub_Sub_objComponent" class="compContainer">
<table class="objDetails" style="position: relative; margin: auto;">
<tr>
<div class="smallSetup" style="margin-top: 10px;">
<b class="ft"><b></b></b>
<div id="ab100_ab100_ab100_Main_Sub_Sub_firstProp" class="row">
<div class="label">
First Name:</div>
<div class="value">
Albert Trebla</div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_secondProp" class="row">
<div class="label" style="line-height:25px;">
Second Year:</div>
<div class="value">
<img src="/Setup/Images.ashx?size=medium&name=5&type=symbol" alt="5" align="absbottom" /><img src="/Setup/Images.ashx?size=medium&name=W&type=symbol" alt="Second" align="absbottom" />
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_thirdProp" class="row" style="height:15px; position:relative;">
<div class="label" style="font-size:.7em;">
Classy Stuff:</div>
<div class="value">
7<br /><br /></div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_fourthProp" class="row">
<div class="label">
Weather:</div>
<div class="value">
Cloudy — Might Rain</div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_fifthProp" class="row">
<div class="label">
Front Text:</div>
<div class="value">
<div class="frontTextBox">Opened</div><div class="frontTextBox">The shop is opened when the bridges are lowered.</div></div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_sixthProp" class="row">
<div class="label">
Flavor:</div>
<div id="ctl00_ctl00_ctl00_MainContent_SubContent_SubContent_FlavorText" class="value">
<div class="frontTextBox"><i>"This taste good!"</i></div></div>
</div>
等々。
これが、アプリでコードを構造化する方法です。
HtmlWeb loader = new HtmlWeb();
HtmlDocument doc = loader.Load(stringUrl);
HtmlNode parentNode = doc.GetElementById(ab100_ab100_ab100_Main_Sub_Sub_objComponent);
HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");
divのコレクションはありますが、次のステップに進むことができません。最初に理解する必要があるのは、そこにあるhtmlコードのレイアウトが変更されるため、firstPropが表示されない場合や、6番目のプロップである場合などです。
したがって、ノードの属性が「ラベル」であるかどうかを確認します。
foreach (HtmlNode htmlNode in allNodes)
{
if (htmlNode.Attributes["class"].Value == "label")
{
}
}
しかし、次の兄弟は空のdivであるため、後で値を確認する方法がわかりません。また、HtmlAgilityPackがどのように機能するのかよくわからないので、これを取得する簡単な方法があるかどうか疑問に思います。
誰かが私にどのように進めるか、または私がしていることが間違っているかどうか、そしてそれを修正する方法についてアドバイスできますか?
* 編集 *
行を変更しました:
HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");
そのため、私のコレクションは、取得するdivのみに絞り込まれます。ただし、クラス「label」のdivを取得するときに読み取る必要があり、その値(例:フロントテキスト)を読み取り、それがフロントテキストの場合は、クラス「value」の次のdivを取得します。