9

उदाहरण के लिए मैं तत्व कैसे चुनूं टेक्स्टबॉक्स अगर मुझे इसकी आईडी नहीं पता है?Htmlagilitypack में GetElementsByTagName

मैं अपने आईडी पता है तो मैं बस लिख सकते हैं:

HtmlAgilityPack.HtmlNode node = doc.GetElementbyId(id); 

लेकिन मैं पाठ बॉक्स के आईडी पता नहीं है और मैं HtmlagilityPack में getElementsByTagName तरीका है जिसके WebBrowser नियंत्रण में उपलब्ध है नहीं मिल रहा। वेब ब्राउज़र नियंत्रण में मैं बस लिख सकता:

HtmlElementCollection elements = browser[i].Document.GetElementsByTagName("form"); 
foreach (HtmlElement currentElement in elements) 
{ 

} 

संपादित

यहाँ HTML प्रपत्र मैं बात कर रहा हूँ के बारे में

<form id="searchform" method="get" action="/test.php"> 
<input name="sometext" type="text"> 
</form> 

कृपया ध्यान दें मैं आईडी पता नहीं है फॉर्म का और एक ही पृष्ठ पर कई रूप हो सकते हैं। केवल एक चीज जो मुझे पता है वह "कुछ समय" है और मैं इस तत्व का उपयोग करके इस तत्व को प्राप्त करना चाहता हूं। तो मुझे लगता है कि मुझे सभी रूपों को एक-एक करके पार्स करना होगा और फिर यह नाम "कुछ समय" ढूंढना होगा, लेकिन मैं यह कैसे कर सकता हूं?

+0

ठीक है, क्या क्या एचटीएमएल दिखता है? एक और तरीका हो सकता है। – shriek

+0

@shriek मैंने अपना प्रश्न संपादित किया है कृपया एक नज़र डालें। – Ali

+0

देखें http://stackoverflow.com/a/3120867/68607 – TFD

उत्तर

26

की तरह कुछ के लिए देख रहे हैं आप अपने टैगनाम द्वारा टैग के लिए देख रहे हैं (जैसे <form name="someForm"> के लिए form के रूप में), तो आप उपयोग कर सकते हैं:

var forms = document.DocumentNode.Descendants("form"); 

यदि आप someForm<form name="someForm"> के लिए टैग की तलाश में हैं, तो आप इसका उपयोग कर सकते हैं:

var forms = document.DocumentNode.Descendants().Where(node => node.Name == "formName"); 

पिछले एक आप एक सरल विस्तार विधि बना सकते हैं के लिए:

public static class HtmlNodeExtensions 
{ 
    public static IEnumerable<HtmlNode> GetElementsByName(this HtmlNode parent, string name) 
    { 
     return parent.Descendants().Where(node => node.Name == name); 
    } 

    public static IEnumerable<HtmlNode> GetElementsByTagName(this HtmlNode parent, string name) 
    { 
     return parent.Descendants(name); 
    } 
} 

ध्यान दें: आपके SelectNodes उपयोग कर सकते हैं और XPath अपने दस्तावेज़ क्वेरी करने के लिए:

var nodes = doc.DocumentNode.SelectNodes("//form//input"); 

आप सभी आदानों पर देना चाहेंगे वह पृष्ठ जो एक फॉर्म टैग में हैं। नाम से

doc.DocumentNode.SelectNodes("//*[@name='name']") 

इनपुट नोड्स:

var nodes = doc.DocumentNode.SelectNodes("//form[1]//input"); 

आप पहली बार प्रपत्र के सभी आदानों पेज

5

मुझे लगता है कि आप इस

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml("...."); 

var inputs = doc.DocumentNode.Descendants("input") 
    .Where(n => n.Attributes["name"]!=null && n.Attributes["name"].Value == "sometext") 
    .ToArray(); 
+0

मैंने अपना प्रश्न संपादित किया है कृपया एक नज़र डालें। – Ali

+0

@Ali मैंने पहले से ही –

+0

उत्तर को अपडेट किया है एन। एट्रिब्यूट चेक और सभी की आवश्यकता नहीं है। एक नाम संपत्ति है। आप '.Where (n => n.Name == TheameYoureLookingFor) का उपयोग कर सकते हैं;' – jessehouwing

5

किसी भी नोड पर नाम से देना चाहेंगे

doc.DocumentNode.SelectNodes("//input[@name='name']") 
संबंधित मुद्दे