Problema di analisi XMLho bisogno di analizzare una pagina HTML per estrarre alcune informazioni ma sto ottenendo risultati inaspettati, vedere lo script di seguito.
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1618931350" id="toc-hId-1618931350">Possibly also this</H2>
<H2 id="toc-hId--933225611" id="toc-hId--933225611">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);
ciò di cui ho idealmente bisogno nella variabile PageBody è:
PageBody="String 2 i want to get
<H2 id="toc-hId-809584724" id="toc-hId-809584724">Possibly also this</H2>
<H2 id="toc-hId--1742572237" id="toc-hId--1742572237">why i get only this</H2>"
o se è possibile ottenere solo il contenuto del tag escludendo i sottotag che mi aspetto di ottenere
PageBody="String 2 i want to get"
mentre invece quello che ottengo è:
PageBody="why i get only this"
Che cosa sto facendo di sbagliato?
Re: Problema di analisi XMLGrazie!
Questo andrà bene per ora.
Tuttavia, per sviluppi futuri, un comando aggiuntivo per On Element() chiamato like XML Body() che restituirà l'intero contenuto di un tag (incluso il TAG annidato come testo) potrebbe essere davvero utile.
Sul commento su HTML vs XML ho capito. cercherò di gestirlo sostituendo
con
se la pagina Web diventa più complicata, quindi sarà conforme a XML. potrei anche immaginare un ciclo che tiene traccia dei tag non chiusi e sostituirli con la versione corretta XML. tuttavia sarebbe fantastico se il parser XML generasse un avviso ma continuasse l'esecuzione in caso di errori in modo simile a quanto fa il browser Web per HTML difettosi.
Infine per quanto riguarda la documentazione: sono d'accordo sul fatto che per Parsing XML la documentazione sia in qualche modo minima, quindi mentre la stai aggiornando per favore includi anche il secondo argomento per XML Attr(). al momento la documentazione afferma solo 0 e 1 attributo possibile, tuttavia ho trovato (e utilizzato) un pezzo di codice che utilizza 2 argomenti e il secondo sarebbe la stringa restituita se l'attributo non viene trovato.
Penso che questa sia una caratteristica utile che non è documentata al momento
Grazie.
Re: Problema di analisi XMLPer quanto posso dirti, manca solo qualcosa che potrebbe non essere mai stato documentato: text(). simile a EndTag().
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-238098" id="toc-hId-238098">three of four</H2>
<H2 id="toc-hId-1743048433" id="toc-hId-1743048433">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 di quattro";
body = "due di quattro
tre di quattroquattro di quattro";
- Text() viene eseguito ogni volta che viene elaborato un nuovo frammento di testo.
- HTML e XML di solito non sono la stessa cosa; il tuo esempio funziona perché è anche XML valido. Un certo numero di comandi HTML, come
, non hanno una corrispondenza e si interrompono se utilizzati in un lettore XML.
- Se l'XML è un po' più complicato, potrebbe essere necessario tenere traccia anche dei livelli di annidamento.
(Ho rielaborato il tuo esempio mentre ero perplesso su come farlo. Vedo se riesco a documentarlo, grazie!)