سؤال

يعد استخدام حزمة HTML Agility أمرًا رائعًا للحصول على أحفاد وجداول كاملة وما إلى ذلك ... ولكن كيف يمكنك استخدامه في الموقف أدناه

...Html Code above...

<dl>
<dt>Location:</dt>
<dd>City, London</dd>
<dt style="padding-bottom:10px;">Distance:</dt>
<dd style="padding-bottom:10px;">0 miles</dd>
<dt>Date Issued:</dt>
<dd>26/10/2010</dd>
<dt>type:</dt>
<dd>cement</dd>
</dl>

...HTML Code below....

كيف يمكنك أن تجد ما إذا كان مايلز أقل من 15 في هذه الحالة ، فأنا لا يمكنك فعل شيء مع عناصر ، لكن هل يجب عليك الحصول على جميع العناصر التي تجد العناصر الصحيحة ثم تجد الرقم فقط للتحقق من قيمته؟ أم أن هناك طريقة لاستخدام Regex مع Agility Pack لتحقيق ذلك بطريقة أفضل ...

هل كانت مفيدة؟

المحلول

أنا متأكد تمامًا (لم يتم التحقق منه) أنه يدعم following-sibling:: المحور ، لذلك يمكنك أيضاً ابحث عن العقدة "dt[.='Distance:']" ثم ابحث node.SelectSingleNode("following-sibling::dd[1]") - أو (أبسط) فقط استخدم node.NextSibling إذا كنت متأكدًا من أن dd دائما يتبع مباشرة dt.

علي سبيل المثال:

string distance = doc.DocumentNode.SelectSingleNode(
          "//dt[.='Distance:']/following-sibling::dd").InnerText;

نصائح أخرى

Get just html simblings



public static List<HtmlNode> GetHtmlNodeList(string html)
    {
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);
        var regs = doc.DocumentNode.SelectSingleNode("//div");
        var first = regs.Descendants().FirstOrDefault();
        var second = first.NextSibling;
        List<HtmlNode> list = new List<HtmlNode>();
        while (second != null)
        {
            list.Add(second);
            second = CheckSibling(second);
        }
        return list;
    }
    private static HtmlNode CheckSibling(HtmlNode node)
    {
        node = node.NextSibling;
        return node;          
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top