Encontrar um nó (ou perto disso) usando o XPath em HTML não bem formado

votos
3

Estou usando XPath para localizar um nó (ou algo próximo a ela) em um modelo que tem HTML não-bem-formado cerca de 10 níveis de profundidade. (Não, eu não escrever este HTML ... mas eu fui encarregado de cavar através dele.)

Eu pareço ser capaz de recuperar um XPath para o elemento em questão usando o XPartner add-on para Firefox; no entanto, ele só me dá a localização no site ao vivo, e não no modelo que me foi dada. (O modelo é de uma linguagem de script do lado do servidor não-padrão; ler uma linguagem construída in-house)

Existem algumas ferramentas XPath você conhece que são particularmente bons em resolver os problemas com HTML não bem formado.

Publicado 09/12/2008 em 22:39
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

Expressões XPath não pode ser avaliada agaist um documento XML não bem formado , que é exatamente o caso descrito.

É possível fazer isso em duas etapas encadeadas, a primeira das quais é a de converter o HTML para XML bem formado e, em seguida, o segundo - para aplicar a expressão XPath.

Portanto, a questão poderia ser mais precisamente declarado como "Como converter HTML para XML para que as expressões XPath pode ser avaliada contra ela".

Aqui estão duas boas ferramentas:

  1. TagSoup , um programa de código aberto , é um Java e SAX - ferramenta baseada, desenvolvido por John Cowan . Este é um parser SAX-compliant escrito em Java que, em vez de analisar XML bem-formado ou válido, analisa HTML, uma vez que é encontrado na natureza: pobre, desagradável e brutal, embora muitas vezes longe de ser curto. TagSoup é projetado para pessoas que têm de processar este material usando alguma aparência de um desenho racional aplicação. Ao fornecer uma interface SAX, ele permite que ferramentas XML padrão a ser aplicado ao mesmo o pior HTML. TagSoup também inclui um processador de linha de comando que lê arquivos HTML e pode gerar tanto HTML limpa ou XML bem formado que é uma aproximação para XHTML. Taggle é uma porta comercial C ++ da TagSoup.

  2. SgmlReader é uma ferramenta desenvolvida pela Microsoft Chris Lovett . SgmlReader é uma API XmlReader sobre qualquer documento SGML (incluindo suporte embutido para HTML). Uma linha de comando utilidade também é fornecido o qual emite o resultado XML bem formada. Baixe o arquivo zip incluindo o executável autônomo eo código fonte completo: SgmlReader.zip

  3. A pura XSLT 2.0 Analisador de HTML escrito por David Carlisle . Lendo o seu código seria um grande exercício de aprendizagem para todos nós.

A partir da descrição:

"D: htmlparse (string) d: htmlparse (string, namespace, html-mode)

A forma um argumento é equivalente a) d: htmlparse (string, ' http://ww.w3.org/1999/xhtml ', true ()))

Analisa a cadeia como HTML e / ou XML usando algumas heurísticas inerente a) o controle de abertura e fechamento implícita de elementos.

Ele não tem pleno conhecimento de HTML DTD, mas não têm lista completa dos elementos vazios e lista completa de definições de entidades. entidades HTML e referências de caracteres decimais e hexadecimais são todos aceitos. Nota html-entidades são reconhecidos mesmo que html-mode = false ().

Os nomes dos elementos são em minúsculas (se html-mode é verdade ()) e colocado no namespace especificado pelo parâmetro de namespace (que pode ser "" para denotar não-namespace a menos que a entrada tem explict declarações de namespace, caso em que estes serão homenageados .

Atribuem nomes estão em minúsculas se html-mode = true ()"

Leia uma descrição mais detalhada aqui .

Respondeu 10/12/2008 em 03:21
fonte usuário

votos
0

O XPath não trabalhar diretamente com HTML. A interação de XPath com o seu HTML é dictacted por qualquer software / biblioteca é analisar o HTML em uma árvore de renderização. Isso pode ajudar a direcionar sua pesquisa de forma adequada.

Respondeu 09/12/2008 em 23:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more