2011-05-11 25 views
3

你好我從一個Web客戶端代碼下面的HTML使用LINQ使用C#exctract從HTML所有隱藏的輸入

<body onLoad="window.focus()"> 
<form name="form1" method="post" action="/www/www.do"> 
<input type="hidden" name="value1" value="aaaa"> 
<input type="hidden" name="value2" value="bbbb"> 
<input type="hidden" name="value3" value="cccc"> 
<input type="hidden" name="value4" value="dddd"> 
<input type="hidden" name="value5" value="eeee"> 

more html..... 

</body> 

我怎樣才能提取使用C#LINQ或字符串輸入型隱藏所有名稱和值functios?

+0

我發佈了一個如何做到這一點的工作示例。 – 2011-05-11 18:16:00

回答

2

使用HtmlAgilityPack,你可以做到以下幾點:

var doc = new HtmlWeb().Load("http://www.mywebsite.com"); 
var nodes = doc.DocumentNode.SelectNodes("//input[@type='hidden' and @name and @value]"); 
foreach (var node in nodes) { 
    var inputName = node.Attributes["name"].Value; 
    var inputValue = node.Attributes["value"].Value; 
    Console.WriteLine("Name: {0}, Value: {1}", inputName, inputValue); 
} 

如果你想將文件從一個文本文件,而不是從一個URL加載,你可以這樣做:

var doc = new HtmlDocument(); 
doc.Load(@"C:\file.html"); 

如果您仍然希望使用LINQ爲此目的,因爲SelectNodes返回HtmlNodeCollection這是一個IEnumerable<Node>,你可以這樣做:

var query = from f in doc.DocumentNode.DescendantNodes() 
      where f.Name == "input" && f.GetAttributeValue("type", "") != "" 
        && f.Attributes.Contains("name") && f.Attributes.Contains("value") 
      select new 
         { 
          f.Attributes["value"].Value, 
          f.Attributes["name"].Name 
         }; 

foreach (var q in query) { 
    Console.WriteLine("Name: {0}, Value: {1}", q.Name, q.Value); 
} 
相關問題