2013-07-30 40 views
5

我正在使用HTML Agility Pack选择一个元素,并从加载的html字符串中返回该元素及其包含的所有内容。在测试我的代码,我跑这对从W3Schools的选择标记示例: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> 

所以我在这里搜索了一下,发现了一条添加行的指令: 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代码中,您的