2012-03-27 14 views
0

フォームからすべての入力要素を抽出しようとしています。私は次のような形式に解析する場合:HTMLアジリティパックでフォームを解析する

<form> 
<input name='test1' type='text'> 
<input name='test2' type='text'> 
<input name='test3' type='text'> 
</form> 

すべてが完璧に働いたが、HTMLの敏捷性パックは、フォーム内の入力要素を検出することができたが、それは次のようなdiv要素の親ノードを持っている場合は、それが検出されません。

<form> 
<div><input name='test1' type='text'></div> 
<div><input name='test2' type='text'></div> 
<div><input name='test3' type='text'></div> 
</form> 

私は

HtmlNode.ElementsFlags.Remove("form"); 

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

は、誰もが何が悪かったのかを教えてもらえます

次のコードを使用していますか?ありがとう

+0

postFormはここにある何 – Kurkula

答えて

6

HtmlNode.Elementsメソッドは名前に一致する最初の世代の子ノードに一致する取得します。あなたの入力を<div>タグの中に入れた後、フォーム要素の第2世代の子​​ノードになります。

一致する名前を持つすべての子孫ノードを取得しますHtmlNode.Descendants方法あなたのコードの作業に活用する:

foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input")) 
{ 
    HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"]; 
} 
2

私は ".Elements()"は何をするのか覚えていませんが、私はそれが単に子ノードを返すと仮定します...あなたのケースではあなたのフォームの直接の子はdivsです。

あなたはもう少しコントロールを持ってXPATHを使用することができます。

.SelectNodes("//form/div/input") 

これは、入力はdivタグをwithingていることを知って、フォームに入力されたノードのリストを返します。

ここにはXPATH TUTORIALの例があります。代わりにElements()

2

使用Descendants() - 後にのみ直接の子で動作しますが、あなたの入力要素はdivタグ内にネストされています

foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input")) 
{ 
    HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"]; 
} 
関連する問題