7

div内から2つのリンクを取得できるようにしたい。

現在、1 つを選択できますが、複数ある場合は機能しないようです。

HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(url);

HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']");

            if (node != null)
            {
                foreach (HtmlNode type in node.SelectNodes("//a@href"))
                {
                    recipe.type += type.InnerText;
                }
            }
            else
                recipe.type = "Error fetching type.";

この HTML から取得しようとしています:

<div class="myclass">
<h3>Not Relevant Header</h3>
    <a href="#">This text</a>, 
    <a href="#">and this text</a>
</div>

どんな助けでも大歓迎です、前もって感謝します。

4

3 に答える 3

17
var div = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']");
if(div!=null)
{
     var links = div.Descendants("a")
                    .Select(a => a.InnerText)
                    .ToList();
}
于 2012-12-15T22:00:35.920 に答える
4

次の XPath を使用します。

//div[@class = 'myclass']//a

with ですべての子孫a要素を取得します。divclass = 'myclass'

//a@href正しくない XPath です。

于 2012-12-15T22:20:40.110 に答える
2

使用:

//div[contains(concat(' ', @class, ' '), ' myclass ')]//a

これにより、属性に classname が含まれるaany の子孫である要素が選択されます。divclass"myclass"

クラス名は単一の場合もあれば、属性に他のクラス名が含まれる場合もあります。この場合、クラス名は最初のクラス名、最後のクラス名、または他のクラス名に囲まれている可能性があります。上記の XPath 式は、これらすべての異なるケースで必要なノードを正しく選択します。

于 2012-12-16T00:08:22.727 に答える