2013-07-30 25 views
5

Korzystam z Agility Pack HTML, aby wybrać element i zwrócić ten element i wszystko, co zawiera, z ładowanego ciągu html. W testowania mojego kodu, wpadłem go przed select przykład tag z w3schools:Pakiet Agility HTML - problem z zaznaczeniem znacznika HTML tagami z opcją

<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> 

Kiedy próbuję wybrać i powrócić to z HTML agility pack, otrzymuję (opcja znaczniki zamykające usunięto):

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

Poszukałem tutaj i znalazłem instrukcję dodania linii: HtmlNode.ElementsFlags.Remove ("opcja");

Zrobiłem to, a teraz mam (tekst opcji zostanie przeniesiony poza znacznikami opcji):

<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> 

chciałbym wyjście pasujące do oryginalnego HTML. Co muszę zrobić, aby to uzyskać?

Grałem także z OptionWriteEmptyNodes, ponieważ gdy testowałem z tagami wejściowymi ich samo zamykanie było usuwane, dodając, że opcja wydawała się to naprawić. Skomentowałem to teraz, aby upewnić się, że nie ma to wpływu na ten problem.

To jest mój kod C# .NET:

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

W swoim pierwszym przykładzie kodu HTML, Twój