Ottieni campi da un modulo in htmlagilitypack

html-agility-pack

Domanda

Voglio ottenere i dati per un modulo così ho scritto il seguito. Non ha funzionato

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

Lo fece a pezzi in due passi

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

Tuttavia ottengo i dati dall'intero file html piuttosto che dal nodo / modulo che è inaspettato. Come ottengo i risultati solo da quel modulo? Ho provato /input[@name] e .//input[@name] che mi ha dato nulla

Risposta popolare

Sembra che questo sia un comportamento predefinito per l'analisi tag <form> in Html Agility Pack. Come hanno detto qui :

FORM viene trattato in questo modo perché molte pagine HTML avevano forme sovrapposte, in quanto questa era in realtà una (potente) caratteristica dell'HT originale. Ora che XML e XHTML esistono, tutti presumono che la sovrapposizione sia un errore, ma non lo è (in HTML 3.2).

Puoi cambiarlo usando:

HtmlNode.ElementsFlags.Remove("form");

e la tua espressione "//form[@name='F1']//input[@name]" dovrebbe funzionare. Oppure cambia la seconda espressione in ".//input[@name]" e dovrebbe anche funzionare:

HtmlNode.ElementsFlags.Remove("form");



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché