9

Nasıl bir öğe seçerim örneğin. kimliğini bilmiyorsam metin kutusuGetLlementsByTagName içinde Htmlagilitypack

Ben onun kimliği biliyorsanız o zaman basitçe yazabilirsiniz:

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

Ama metin, kullanıcının kimliğini bilmiyorum ve ben webbrowser kontrolde bulunmaktadır HTMLAgilityPack içinde getElementsByTagName yöntemini bulamıyor. web tarayıcı kontrolü ben sadece yazılı olabilir:

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

} 

DÜZENLEME İşte

konuşmaktayım HTML formu yaklaşık

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

ben kimliğini bilmiyorum unutmayın formu Ve aynı sayfada birkaç form olabilir. Bildiğim tek şey "sometext" ve bu ismi sadece bu ismi kullanarak almak istiyorum. Bu yüzden, tüm formları tek tek ayrıştırmak zorunda kalacağım ve sonra bu adı "sometext" olarak göreceğim ama bunu nasıl yapacağım? onun tagName tarafından etiketi arıyorsanız

+0

peki ya html benziyor mu? başka bir yol olabilir. – shriek

+0

@shriek Sorularımı düzenledim lütfen bir göz atın. – Ali

+0

Bkz. Http://stackoverflow.com/a/3120867/68607 – TFD

cevap

26

gibi bir şey arıyordum düşünüyorum (örneğin <form name="someForm"> için form gibi), o zaman kullanabilirsiniz:

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

Etiketi, name özelliğine göre (<form name="someForm"> için someForm gibi) arıyorsanız, aşağıdakileri kullanabilirsiniz:

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

Not: Ayrıca SelectNodes kullanabilir ve XPath belgenizi sorgulamak için:

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

üzerinde size tüm girdileri verir misiniz basit bir uzantısı yöntemi oluşturabilirsiniz sonuncusu için form etiketindeki sayfa.

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

adıyla sayfa

5

Bunu

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

Sorumu çözdüm lütfen bir göz atın. – Ali

+0

@Ali Ben zaten –

+0

cevabını güncelledim n.Attributes çekleri ve hepsine gerek yok. Bir Name özelliği var. '.Where (n => n.Name == TheNameYoureLookingFor);' – jessehouwing

5

Herhangi düğüm üzerinde size ilk formun tüm girdileri verir misiniz:

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

Girdi düğümleri adıyla:

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