Problème d'analyse XMLj'ai besoin d'analyser une page HTML pour extraire des informations mais j'obtiens un résultat inattendu, voir le script ci-dessous.
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1618931294" id="toc-hId-1618931294">Possibly also this</H2>
<H2 id="toc-hId--933225667" id="toc-hId--933225667">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);
ce dont j'ai idéalement besoin dans la variable PageBody est :
PageBody="String 2 i want to get
<H2 id="toc-hId-809584668" id="toc-hId-809584668">Possibly also this</H2>
<H2 id="toc-hId--1742572293" id="toc-hId--1742572293">why i get only this</H2>"
ou s'il est seulement possible d'obtenir le contenu de la balise à l'exclusion des sous-étiquettes que je m'attends à obtenir
PageBody="String 2 i want to get"
tandis qu'au lieu de cela, ce que j'obtiens est:
PageBody="why i get only this"
Qu'est-ce que je fais mal?
Re : problème d'analyse XMLMerci!
Cela suffira pour l'instant.
Cependant, pour les développements futurs, une commande supplémentaire pour On Element() appelée comme XML Body() qui renverra tout le contenu d'une balise (y compris le TAG imbriqué sous forme de texte) pourrait être très utile.
Sur le commentaire sur HTML vs XML, je comprends. Je vais essayer de le gérer en remplaçant le
par
si la page Web devient plus compliquée, elle sera donc conforme au XML. Je pourrais même imaginer une boucle traquant les balises non fermées et les remplacer par la version XML correcte. cependant, ce serait formidable si l'analyseur XML émettait un avertissement mais continuait l'exécution en cas d'erreurs de la même manière que le navigateur Web fait pour les HTML défectueux.
Enfin concernant la documentation : je suis d'accord que pour l'analyse XML, la documentation est quelque peu minime, donc pendant que vous la mettez à jour, veuillez également inclure le deuxième argument pour XML Attr(). pour le moment, la documentation indique que seuls 0 et 1 attribut sont possibles, mais j'ai trouvé (et utilisé) un morceau de code qui utilise 2 arguments et le second serait la chaîne renvoyée si l'attribut n'est pas trouvé.
je pense que c'est une fonctionnalité utile qui n'est pas documentée au moment
Merci.
Re : Problème d'analyse XMLAutant que je sache, il ne vous manque que quelque chose qui n'a peut-être jamais été documenté : text(). similaire à EndTag().
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-238042" id="toc-hId-238042">three of four</H2>
<H2 id="toc-hId-1743048377" id="toc-hId-1743048377">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 = "l'un des quatre" ;
corps = "deux sur quatre
trois sur quatrequatre sur quatre" ;
- Text() s'exécute chaque fois qu'un nouvel extrait de texte est traité.
- HTML et XML ne sont généralement pas identiques ; votre exemple fonctionne car il s'agit également d'un XML valide. Un certain nombre de commandes HTML, telles que
, n'ont pas de correspondant et cassent si elles sont utilisées dans un lecteur XML.
- Si le XML est un peu plus compliqué, vous devrez peut-être également suivre les niveaux d'imbrication.
(J'ai retravaillé votre exemple pendant que je réfléchissais à la façon de le faire. Je vais voir si je peux documenter cela, merci !)