2013-07-30 31 views
5

HTML Agility Packを使用して要素を選択し、その要素とその中のすべてを読み込まれたHTML文字列から返します。HTML Agility Pack - オプションタグ付きのHTML選択タグを選択する際の問題

<select name="cars"> 
    <option value="volvo">Volvo XC90</option> 
    <option value="saab">Saab 95</option> 
    <option value="mercedes">Mercedes SLK</option> 
    <option value="audi">Audi TT</option> 
</select> 

私が選択して、HTMLの敏捷性パックでこれを返すようにしようと、私が取得(オプションの終了タグを削除):

<select name="cars"> 
    <option value="volvo">Volvo XC90 
    <option value="saab">Saab 95 
    <option value="mercedes">Mercedes SLK 
    <option value="audi">Audi TT 
</select> 
私のコードをテストするには、私は、W3Schoolsのからselectタグの例に対してそれを実行しました

ここでいくつか検索して、行を追加する指示を見つけました。 HtmlNode.ElementsFlags.Remove( "option");

私がいること、そして今私は(オプションのテキストはオプションタグの外に移動される)を取得しました:

<select name="cars"> 
    <option value="volvo"></option>Volvo XC90 
    <option value="saab"></option>Saab 95 
    <option value="mercedes"></option>Mercedes SLK 
    <option value="audi"></option>Audi TT 
</select> 

私は出力が元のHTMLにマッチしたいと思います。それを得るために私は何をする必要がありますか?

入力タグでテストしたときに、自分のセルフクローズが削除されていたときと同じようにOptionWriteEmptyNodesで再生していましたが、そのオプションを修正したようです。私は今、この問題に影響していないことを確認するためにコメントしました。

これは私の.NET C#コードです:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(content); 
HtmlNode.ElementsFlags.Remove("option"); // otherwise, the closing tag is removed. 

//doc.OptionWriteEmptyNodes = true; 

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

if (nodes == null) 
    return "Not found"; 
else 
    return nodes[0].OuterHtml; 
+0

最初の例のHTMLコードでは、