حزمة أجراس أتش تي أم أل - حدد العقد بعد عقدة محددة

StackOverflow https://stackoverflow.com/questions/1899789

سؤال

سألت السؤال في مناقشة codeplex ولكن آمل أن أحصل على إجابة أسرع هنا في Stackoverflow.

لذلك، أستخدم حزمة أوتال HTML لحل HTML في C #. لدي هيكل HTML التالي:

<body>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
   <p class="specific">text</p>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
</body>

وأحتاج إلى الحصول على جميع عناصر P مع فئة "فقرة" موجودة بعد عنصر P مع فئة "محددة".

هل هناك طريقة للقيام بذلك؟

شكرا.

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

المحلول

باستخدام .Class كما هو الحال في مثال العلامة (إذا لم يكن ذلك موجودا، فاستبدل كل ما هو مناسب)

يستخدم مخيها

على سبيل المثال في LinQPad. لقد حصلت 5,6,7 من:

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

اعتمادا على إرجاع تحديد أنواع المحددات، إما:

.SelectNodes( "/p" ).SkipWhile( p => p.Class != "specific" ).Skip(1)

أو

.SelectNodes( "/p" ).Cast<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)

(أو، إصدار قبيح)

.SelectNodes( "/p" ).SkipWhile( p => ((XX)p).Class != "specific" ).Skip(1)

(أو في بعض الحالات - ليس إذا كان تعبيرك يتصفح بالفعل بشكل مناسب)

.SelectNodes( "/p" ).OfType<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)

تحرير: ربما أقوم بإنشاء طريقة تمديد:

static class HapExtensions
{
    public IEnumerable<T> SkipUntilAfter( this IEnumerable<T> sequence, Predicate<T> predicate) {
        return sequence.SkipWhile( predicate).Skip(1);
       }
}

أي شخص يهتم البحث عن الفن السابق لهذا؟ أي اقتراحات اسم جيد؟

نصائح أخرى

جرب هذا

bool latterDayParagraphs = false;
List<DocumentNode> nodes = new List<DocumentNode>();
foreach(var pElement in doc.DocumentNode.SelectNodes("/p"))
{
   if(pElement.Class != "paragraph") 
   {
      latterDayParagraphs = true;
      continue;
   }
   if(latterDayParagraphs)
   {
      nodes.Add(pElement);
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top