Problema de análisis XMLNecesito analizar una página HTML para extraer algo de información, pero obtengo resultados inesperados, consulte la secuencia de comandos a continuación.
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1618931355" id="toc-hId-1618931355">Possibly also this</H2>
<H2 id="toc-hId--933225606" id="toc-hId--933225606">why i get only this</H2>
";
PageTitle="";
PageBody="";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( PageTitle=XML text();show("Found title") )
),
On Element( "body",
End Tag( PageBody=XML text();show("Found body") )
),
);
show(PageTitle,PageBody);
Lo que idealmente necesito en la variable PageBody es:
PageBody="String 2 i want to get
<H2 id="toc-hId-809584729" id="toc-hId-809584729">Possibly also this</H2>
<H2 id="toc-hId--1742572232" id="toc-hId--1742572232">why i get only this</H2>"
o si solo es posible obtener el contenido de la etiqueta excluyendo las subetiquetas que espero obtener
PageBody="String 2 i want to get"
mientras que en cambio lo que obtengo es:
PageBody="why i get only this"
¿Qué estoy haciendo mal?
Re: problema de análisis de XML¡Gracias!
Esto se hará por ahora.
Sin embargo, para desarrollos futuros, un comando adicional para el elemento On () llamado como XML Body () que devolverá todo el contenido de una etiqueta (incluido el TAG anidado como texto) podría ser realmente útil.
En el comentario sobre HTML vs XML me sale el punto. Trataré de manejarlo con la sustitución de
con
si la página web se vuelve más complicada para que sea compatible con XML. Incluso podría imaginar un bucle de seguimiento de las etiquetas no cerradas y sustituirlas por la versión XML correcta. sin embargo, sería genial si el analizador XML generara una advertencia pero continuara la ejecución en caso de errores de manera similar a como lo hacen los navegadores web para los códigos HTML defectuosos.
Finalmente con respecto a la documentación: acepto que para el análisis de XML, la documentación es algo mínima, por lo que mientras la actualice, también incluya el segundo argumento para el atributo Attr () de XML. en este momento, la documentación indica que solo es posible el atributo 0 y 1, sin embargo, encontré (y utilicé) un fragmento de código que utiliza 2 argumentos y el segundo sería la cadena devuelta si no se encuentra el atributo.
Creo que esta es una característica útil que no está documentada en el meoment
Gracias.
Re: problema de análisis de XMLPor lo que puedo decir, solo falta algo que puede que nunca haya sido documentado: text (). similar a EndTag ().
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-238103" id="toc-hId-238103">three of four</H2>
<H2 id="toc-hId-1743048438" id="toc-hId-1743048438">four of four</H2>
";
title = "";
body = "";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( title = XML Text(); )
),
On Element( "body",
Text( body = body || XML Text(); ),
)
);
show(title,body);
title = "uno de cuatro";
body = "dos de cuatro
tres de cuatro de cuatro ";
- Texto () se ejecuta cada vez que se procesa un nuevo fragmento de texto.
- HTML y XML no suelen ser los mismos; Tu ejemplo funciona porque también es un XML válido. Una serie de comandos HTML, como
, no tienen una combinación y se rompen si se usan en un lector XML.
- Si el XML es un poco más complicado, es posible que también deba realizar un seguimiento de los niveles de anidamiento.
(Reescribí tu ejemplo mientras me desconcertaba sobre cómo hacerlo. Veré si puedo documentar esto, ¡Gracias!)