2010-03-05 15 views
22

उदाहरण HTML प्राप्त किए बिना HtmlAgilityPack के साथ एक रूप में सभी इनपुट तत्वों प्राप्त करने के लिए:कैसे एक अशक्त संदर्भ त्रुटि

<html><body> 
    <form id="form1"> 
     <input name="foo1" value="bar1" /> 
     <!-- Other elements --> 
    </form> 
    <form id="form2"> 
     <input name="foo2" value="bar2" /> 
     <!-- Other elements --> 
    </form> 
</body></html> 

टेस्ट कोड:

HtmlDocument doc = new HtmlDocument(); 
doc.Load(@"D:\test.html"); 
foreach (HtmlNode node in doc.GetElementbyId("form2").SelectNodes(".//input")) 
{ 
    Console.WriteLine(node.Attributes["value"].Value);    
} 

बयान doc.GetElementbyId("form2").SelectNodes(".//input") मुझे एक अशक्त संदर्भ देता है।

कुछ भी मैंने गलत किया? धन्यवाद। क्योंकि वे अन्य HTML तत्वों ओवरलैप करने की अनुमति है

HtmlNode.ElementsFlags.Remove("form"); 

HtmlDocument doc = new HtmlDocument(); 

doc.Load(@"D:\test.html"); 

HtmlNode secondForm = doc.GetElementbyId("form2"); 

foreach (HtmlNode node in secondForm.Elements("input")) 
{ 
    HtmlAttribute valueAttribute = node.Attributes["value"]; 

    if (valueAttribute != null) 
    { 
     Console.WriteLine(valueAttribute.Value); 
    } 
} 

डिफ़ॉल्ट HTML चपलता पैक करके पार्स खाली नोड के रूप में रूपों:

उत्तर

40

आप निम्न कार्य कर सकते हैं। पहली पंक्ति, (HtmlNode.ElementsFlags.Remove("form");) इस व्यवहार को अक्षम करती है जिससे आप दूसरे तत्व के अंदर इनपुट तत्व प्राप्त कर सकते हैं।

अद्यतन: प्रपत्र तत्वों के उदाहरण ओवरलैप:

<table> 
<form> 
<!-- Other elements --> 
</table> 
</form> 

तत्व एक तालिका के अंदर शुरू होता है लेकिन तालिका तत्व बाहर से बंद है। एचटीएमएल विनिर्देशन में इसकी अनुमति है और एचटीएमएल एजिलिटी पैक को इससे निपटना है।

+0

क्या इसका मतलब यह है कि, जब तक कि आप 'HtmlNode.ElementsFlags.Remove ("form") का उपयोग न करें;', एचएपी के माध्यम से 'फॉर्म' तत्वों के बच्चों को पार्स करना संभव नहीं है? –

+0

@ केविन, मुझे किसी अन्य विकल्प का ज्ञान नहीं है। –

+1

5 साल बाद - अभी भी एक आवश्यकता है, अभी भी सही जवाब है। इसके अलावा, पैकेज में अभी भी बदला जाना चाहिए ... – getglad

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