Forum général.cherche-logiciel XMLLINT ou Parser un XML avec XPath en Shell

Posté par  .
Étiquettes : aucune
0
19
avr.
2010
Bonsoir,

J'utilise depuis peu un logiciel en Shell pour parser une URL XML et obtenir une valeur suivant un path.

Ce logiciel fonctionné très bien (avec quelques réglages sed pour nettoyer le résultat. Cependant, sans rien avoir changé de mon fichier XML ni de ma ligne Shell, ca ne fonctionne plus.

J'utilise xmllint pour parser ce fichier par cette manière :


echo "cat mod_cband/Users/mick/usages/total" | xmllint http://localhost/cband-status?xml


Où 'mick' est un User et l'adresse HTTP, le lien pour accéder aux données d'un trafic Web monitoré par cband (un module Apache).

Voici ce que xmllint me retourne maintenant :


http://localhost/cband-status?xml:216: parser error : StartTag: invalid element name

^
http://localhost/cband-status?xml:234: parser error : expected '>'

^
http://localhost/cband-status?xml:234: parser error : Opening and ending tag mismatch: Virtualhosts line 6 and unparseable

^
http://localhost/cband-status?xml:4339: parser error : StartTag: invalid element name

^
http://localhost/cband-status?xml:4357: parser error : expected '>'

^
http://localhost/cband-status?xml:4357: parser error : Opening and ending tag mismatch: mod_cband line 2 and unparseable

^
http://localhost/cband-status?xml:4357: parser error : Extra content at the end of the document



Il semble bloquer lorsque les balises XML débutent par un nombre. J'ai fais l'essai pour générer cette config XML avec une lettre et ainsi, fausser le 'ServerName' ainsi que les identifiants et ca marche ... Mais plus rien ne fonctionne au niveau Apache étant donné que les 'ServerName' (adresse Web) ne sont plus les mêmes.

Modifier ce fichier de cette manière à chaque parse XML est possible mais c'est une perte de temps incroyable.

Le plus étrange est que j'ai toujours eux des adresses commendant par des nombres et que xmllint n'a jamais toussé.

Deux questions :
- Avez vous une solution à xmllint ?
- Auriez vous une autre application (non pas pour valider le xml comme le fait xmllint) mais un parseur XML XPath en Shell ?

Merci d'avance
  • # Résolu

    Posté par  . Évalué à 2.

    Résolu en 3 lignes :

    wget http://localhost/cband-status?xml --output-document=/tmp/cband-status.xml
    cat /tmp/cband-status.xml | tail +2 | sed 's/<\//_\/x/g' | sed 's/</<x/g' | sed 's/_\/x/<\/x/g' > /tmp/cband-status2.xml
    mv /tmp/cband-status2.xml /tmp/cband-status.xml

    Il me suffit ensuite à parser le fichier sur disque.
    Ces 3 lignes ne prennent pas plus de 2 secondes et je pense que mon parse est accéléré par la suite.
    • [^] # Re: Résolu

      Posté par  . Évalué à 1.

      wget -qO- http://localhost/cband-status?xml | tail +2 | sed 's/<\//_\/x/g' | sed 's/</<x/g' | sed 's/_\/x/<\/x/g' > /tmp/cband-status.xml C'est un peu plus court avec un fichier temporaire et un mv en moins. À ce stade, perl ou python seraient peut-être plus appropriés pour ces manipulations, d'autant que ces langages disposent de modules adaptés au traitement XML.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.