HTML Agility Pack を使用して要素を選択し、読み込まれた html 文字列からその要素とそれに含まれるすべてのものを返します。コードをテストする際に、w3schools の select タグの例に対して実行しました。
<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>
そこで、ここで検索を行ったところ、次の行を追加する指示が見つかりました: 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;