2009-12-14 19 views
8

के बाद नोड्स का चयन करें मैंने प्रश्न in a codeplex discussion से पूछा लेकिन मुझे स्टैक ओवरफ्लो पर एक त्वरित उत्तर प्राप्त करने की उम्मीद है।एचटीएमएल एजिलिटी पैक - विशिष्ट नोड

तो, मैं सी # में एचटीएमएल पार्सिंग के लिए एचटीएमएल एजिलिटी पैक का उपयोग करता हूं। मैं निम्नलिखित एचटीएमएल संरचना है:

<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> 

और मैं वर्ग "पैरा" के साथ सभी पी तत्वों को साथ वर्ग "विशिष्ट" पी तत्व के बाद अस्तित्व में प्राप्त करने की आवश्यकता।

क्या ऐसा करने का कोई तरीका है?

धन्यवाद।

उत्तर

6

का प्रयास करें (अगर वह does not मौजूद हैं, विकल्प के लिए जो भी उचित है)

उपयोग SkipWhile

उदा LINQPad में आपको मिल 5,6,7 से:

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

तो प्रकार SelectNodes रिटर्न पर निर्भर करता है, या तो:

.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); 
     } 
} 

कोई भी इस के लिए पूर्व कला ऊपर खोज करने के लिए परवाह: मैं शायद ही विस्तार विधि बनाएंगे ? कोई अच्छा नाम सुझाव?

+0

SkipWhile ठंडा +1 –

+0

यह वही है जो मुझे चाहिए था। धन्यवाद। – morsanu

+0

मैं इसे जल्द ही इस्तेमाल कर रहा हूं, इसलिए पूछने के लिए धन्यवाद! –

2

मार्क उदाहरण के रूप में उपयोग करते हुए इस .class

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); 
    } 
} 
+0

मुझे लगता है कि आपने अभी सवाल को देखा है, वास्तव में इसे पढ़ा नहीं है। :) मैं एचटीएमएल एजिलिटी पैक के साथ एच # में एचटीएमएल का विश्लेषण करता हूं, और मुझे क्लास = "विशिष्ट" के साथ पी टैग के बाद क्लास = "अनुच्छेद" के साथ केवल पी टैग चुनने की आवश्यकता है। – morsanu

+0

इसके बारे में क्षमा करें, उम्मीद है कि यह उत्तर अधिक उपयोगी है (आपको System.Linq के संदर्भ की आवश्यकता होगी)। :) –

+0

वह "अनुच्छेद" वर्ग के साथ सभी पी टैग का चयन करेगा। कक्षा = "विशिष्ट" के साथ पी टैग के बाद मुझे केवल उन्हीं की आवश्यकता है। – morsanu

संबंधित मुद्दे