Html Agility Pack - ネストされたelemetsの最初のリンクを選択する方法

c# html-agility-pack

質問

これは私のHTMLコードです。 <li id="item1"><li id="item2">後に最初のリンク(メインリンク1、メインリンク2、...)を選択する方法

<div id="mainmenu">
<div class="wrapper">
    <div class="main-menu">
        <ul class="navigation">
            <li class="menu-group">
                <ul>
                    <li id="item1">
                        <a href="/">Main link 1</a>

                        <div id="item1-sub">
                            <ul>
                                <li>
                                    <a href="#1">subLink1</a>
                                </li>
                                <li>
                                    <a href="#1">subLink2</a>
                                </li>
                            </ul>
                        </div>
                    </li>
                    <li id="item2">
                        <a href="/">Main link 2</a>

                        <div id="item2-sub">
                            <ul>
                                <li>
                                    <a href="#1">subLink1</a>
                                </li>
                                <li>
                                    <a href="#1">subLink2</a>
                                </li>
                            </ul>
                        </div>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</div>

C#コード:このコードには問題があります。誰かが問題を解決するのに役立つことを願っています。

<div id="mainmenu">
<div class="wrapper">
    <div class="main-menu">
        <ul class="navigation">
            <li class="menu-group">
                <ul>
                    <li id="item1">
                        <a href="/">Main link 1</a>

                        <div id="item1-sub">
                            <ul>
                                <li>
                                    <a href="#1">subLink1</a>
                                </li>
                                <li>
                                    <a href="#1">subLink2</a>
                                </li>
                            </ul>
                        </div>
                    </li>
                    <li id="item2">
                        <a href="/">Main link 2</a>

                        <div id="item2-sub">
                            <ul>
                                <li>
                                    <a href="#1">subLink1</a>
                                </li>
                                <li>
                                    <a href="#1">subLink2</a>
                                </li>
                            </ul>
                        </div>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</div>

受け入れられた回答

あなたはこれを行うことができます

var html = "<html><head></head><body><div id=\"mainmenu\"><div class=\"wrapper\"><div class=\"main-menu\"><ul class=\"navigation\"><li class=\"menu-group\"><ul><li id=\"item1\">" +
        "<a href=\"/\">Main link 1</a><div id=\"item1-sub\"><ul><li><a href=\"#1\">subLink1</a></li><li><a href=\"#1\">subLink2</a></li></ul></div></li><li id=\"item2\">" +
        "<a href=\"/\">Main link 2</a><div id=\"item2-sub\"><ul><li><a href=\"#1\">subLink1</a></li><li><a href=\"#1\">subLink2</a></li></ul></div></li></ul></li></ul></div></div></div></body></html>";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var mainLink1 = doc.DocumentNode.SelectSingleNode("//li[@id='item1']//a");
var linkUrl1 = mainLink1.Attributes["href"].Value;
var linkText1 = mainLink1.InnerText;

var mainLink2 = doc.DocumentNode.SelectSingleNode("//li[@id='item2']//a");
var linkUrl2 = mainLink2.Attributes["href"].Value;
var linkText2 = mainLink2.InnerText;

出力:

ここに画像の説明を入力

編集:

次のコードを使用してメインリンクをループで取得します。これにより、目的のリンクのみが選択されます。

var html = "<html><head></head><body><div id=\"mainmenu\"><div class=\"wrapper\"><div class=\"main-menu\"><ul class=\"navigation\"><li class=\"menu-group\"><ul><li id=\"item1\">" +
        "<a href=\"/\">Main link 1</a><div id=\"item1-sub\"><ul><li><a href=\"#1\">subLink1</a></li><li><a href=\"#1\">subLink2</a></li></ul></div></li><li id=\"item2\">" +
        "<a href=\"/\">Main link 2</a><div id=\"item2-sub\"><ul><li><a href=\"#1\">subLink1</a></li><li><a href=\"#1\">subLink2</a></li></ul></div></li></ul></li></ul></div></div></div></body></html>";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var mainLink1 = doc.DocumentNode.SelectSingleNode("//li[@id='item1']//a");
var linkUrl1 = mainLink1.Attributes["href"].Value;
var linkText1 = mainLink1.InnerText;

var mainLink2 = doc.DocumentNode.SelectSingleNode("//li[@id='item2']//a");
var linkUrl2 = mainLink2.Attributes["href"].Value;
var linkText2 = mainLink2.InnerText;



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