Pergunta

Estou usando htmlagilitypack. Eu crio um htmldocument e loadhtml com a seguinte sequência:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One</option><option value="2">Two</option></select>

Isso faz algumas coisas inesperadas. Primeiro, ele fornece dois erros de analisador, EndTagnotRequired. Segundo, o Node Select tem 4 filhos - dois para as tags de opção e mais duas para o texto interno das tags de opção. Por último, o OuterHtml é assim:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One<option value="2">Two</select>

Então, basicamente, está decidindo soltar as tags de fechamento nas opções. Vamos deixar de lado por um momento, seja adequado e desejável para fazer isso. Estou usando o HTMLAGILIDADEPACK para testar o código de geração HTML, por isso não quero que ele tome nenhuma decisão para mim ou faça erros, a menos que o HTML seja realmente malformado. Existe uma maneira de fazer isso se comportar como eu quero? Tentei definir algumas das opções para o HTMLDocument, especificamente:

 doc.OptionAutoCloseOnEnd = false;
 doc.OptionCheckSyntax = false;
 doc.OptionFixNestedTags = false;

Isto não está a funcionar. Se o htmlagilitypack não pode fazer o que eu quero, você pode recomendar algo que possa?

Foi útil?

Solução

O mesmo erro exatamente é relatado na discussão da página inicial do HAP, mas parece que nenhuma correção significativa foi feita no projeto em alguns anos. Não encorajador.

Uma navegação rápida da fonte sugere que o erro pode ser fixável comentando a linha 92 do htmlnode.cs:

// they sometimes contain, and sometimes they don 't...
ElementsFlags.Add("option", HtmlElementFlag.Empty);

(Na verdade, não, eles sempre contêm o texto da etiqueta, embora uma corda em branco também seja um texto válido. Um autor descuidado pode omitir a marca final, mas isso é verdade para qualquer elemento.)

ADICIONAR

Uma solução equivalente está ligando HtmlNode.ElementsFlags.Remove("option"); Antes de qualquer uso do Liberário (sem a necessidade de modificar o Código Fonte Liberário)

Outras dicas

Parece que há algum motivo para não analisar a tag de opção como uma tag "genérica", para a conformidade com XHTML, no entanto, isso pode ser uma dor real no pescoço.

Minha sugestão é fazer uma tags de barragem inteira e alterar as tags de "opção" para "my_option", assim você:

  1. Não precisa modificar a fonte da biblioteca (e pode atualizá -la mais tarde).
  2. Pode analisar como você costumava.

A postagem original no fórum htmlagilitypack pode ser encontrada em:http://htmlagilitypack.codeplex.com/thread/view.aspx?threadid=14982

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top