Html Agility Pack Loop Through Table - 前のセルの値に基づいてセルの値を取得する

c# html-agility-pack phantomjs selenium-webdriver web-scraping

質問

私は複数のテーブルを持っており、Location Valueは異なるインデックス順で与えられます。私がテーブルをループするときに、以前のセル文字列が "Location"であれば、どのようにして位置値を取得できますか?下の例ではセル[7]ですが、他のテーブルでは9となります。セルの内部テキストが "Location"の後で条件付きで値を取得するにはどうすればよいですか?基本的には、セル「場所」が次のセルの内部テキストを取得します。

HTMLテーブル:

<table class="tbfix FieldsTable"">
<tbody>
    <tr>
        <td class="name">Last Movement</td>
        <td class="value">Port Exit</td>
    </tr>
    <tr>
        <td class="name">Date</td>
        <td class="value">26/06/2017 00:00:00</td>
    </tr>
    <tr>
        <td class="name">From</td>
        <td class="value">HAMBURGE</td>
    </tr>
    <tr>
        <td class="name">Location</td>
        <td class="value">EUROGATE  HAMBURG</td>
    </tr>
    <tr>
        <td class="name">E/F</td>
        <td class="value">E</td>
    </tr>
</tbody>

コントローラループスルー:

<table class="tbfix FieldsTable"">
<tbody>
    <tr>
        <td class="name">Last Movement</td>
        <td class="value">Port Exit</td>
    </tr>
    <tr>
        <td class="name">Date</td>
        <td class="value">26/06/2017 00:00:00</td>
    </tr>
    <tr>
        <td class="name">From</td>
        <td class="value">HAMBURGE</td>
    </tr>
    <tr>
        <td class="name">Location</td>
        <td class="value">EUROGATE  HAMBURG</td>
    </tr>
    <tr>
        <td class="name">E/F</td>
        <td class="value">E</td>
    </tr>
</tbody>

受け入れられた回答

あなたのforeachループでこれを使うことができます:

var location = eachNode.FindElement(By.XPath(".//td[contains(text(),'Location')]/following-sibling::td));

人気のある回答

あなたのデータが常に私はすべてのタグをループし、辞書にデータを追加するように構造化されていると仮定します。

次のようなことを試してください:

Dictionary<string,string> tableData = new Dictionary<string, string>();
var trNodes = eachNode.FindElements(By.TagName("tr"));

foreach (var trNode in trNodes)
{
    var name = trNode.FindElement(By.CssSelector(".name")).Text.Trim();
    var value = trNode.FindElement(By.CssSelector(".value")).Text.Trim();

    tableData.Add(name,value);
}

var location = tableData["location"];

辞書や構造を検証したりチェックしたりする必要がありますが、それが一般的な考えです。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ