IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

Xpath dans script Perl


Sujet :

Web Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Xpath dans script Perl
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre. un script du nom de listvz.htm composé comme suit : Le principe général. La page .htm lancée, lance des requêtes sur des machines virtuelles qui renvoient un fichier XML. C'est analysé puis affiché.

    [$ var $req $vznodes $sessions $]
    [-
    $req = shift;
    $vznodes = $req->{vznodes};
    $sessions = $req->open_sessions();
    -]

    <table>

    [$ var $host $]
    [$ foreach $host ( sort keys %$sessions ) $]
    <tr span="6"><td>&nbsp;</td></tr>
    <tr span="6"><th align="left">[+ $host +]</th></tr>
    <tr>
    <th align="left">[= state =]</th>
    <th align="left">[= alert =]</th>
    <th align="left">[= on boot =]</th>
    <th align="left">[= veid =]</th>
    <th align="left">[= ip address =]</th>
    <th align="left">[= hostname =]</th>
    <th align="left">[= espace disque =]</th>
    <th align="left">[= os template =]</th>
    </tr>

    [$ var $info $]
    [-
    my $vza = $sessions->{$host};
    my $eid_list = $vza->send_msg( 'vzaenvm', 'get_list' );
    my @eid_list;
    push @eid_list, $_->string_value()
    foreach $eid_list->findnodes( '/packet/vzlp:data/vzle:vzaenvm/vzle:eid' );
    $info = $vza->send_msg( 'vzaenvm', 'get_info'
    , { eid => \@eid_list, config => '' });
    -]

    [$ var $vz $]
    [$ foreach $vz ( $info->findnodes( '/packet/vzlp:data/vzle:vzaenvm/vzle:env' )) $]
    <tr>
    <td>[+ $info->findvalue( 'vzlt:status/vzlt:state', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:alert', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/vzat:on_boot', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/vzat:veid', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/vzlt:address/vzlt:ip', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/vzlt:hostname', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/qos/@diskspace/following', $vz ) +]</td>
    <td>[+ $info->findvalue( 'vzlt:virtual_config/vzat:os_template/vzat:name', $vz ) +]</td>
    </tr>
    [$ endforeach $]
    [$ endforeach $]
    </table>
    le fichier XML ressemble a ceci (le fichier n'est pas complet).

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?xml version="1.0" encoding="UTF-8"?><packet xmlns:ns4="http://www.swsoft.com/webservices/vzl/4.0.0/types" xmlns:ns1="http://www.swsoft.com/webservices/vzl/4.0.0/protocol" xmlns:ns2="http://www.swsoft.com/webservices/vzl/4.0.0/envm" xmlns:ns3="http://www.swsoft.com/webservices/vza/4.0.0/vzatypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" time="2010-11-04T11:13:12+0000" id="13" priority="0" version="4.0.0">
    <ns1:origin>vzaenvm</ns1:origin>
    <ns1:target>vzclient1406-de1d858b-b3e8-b7d2-428f-f893a3469581</ns1:target>
    <ns1:dst>
    <director>gend</director>
    </ns1:dst>
    <ns1:data>
    <ns2:vzaenvm>
    <ns2:env xsi:type="ns3:envType">
    <ns4:parent_eid>de1d858b-b3e8-b7d2-428f-f893a3469581</ns4:parent_eid>
    <ns4:eid>a26861cc-2c27-41fb-8087-c636e04480bb</ns4:eid>
    <ns4:status xsi:type="ns4:env_statusType">
    <ns4:state>6</ns4:state>
    </ns4:status>
    <ns4:alert>0</ns4:alert>
    <ns4:config xsi:type="ns4:env_configType"/>
    <ns4:virtual_config xsi:type="ns3:venv_configType">
    <ns3:veid>188092</ns3:veid>
    <ns4:type>virtuozzo</ns4:type>
    <ns3:ve_private>D:\vz\Private\188092</ns3:ve_private>
    <ns3:ve_root>D:\vz\Private\188092\root</ns3:ve_root>
    <ns4:qos>
    <ns4:id>cpuguarantee</ns4:id>
    <ns4:hard>0</ns4:hard>
    </ns4:qos>
    <ns4:qos>
    <ns4:id>cpulimit</ns4:id>
    <ns4:hard>100</ns4:hard>
    </ns4:qos>
    <ns4:qos>
    <ns4:id>diskspace</ns4:id>
    <ns4:hard>10485760</ns4:hard>
    </ns4:qos>

    Mon problème est de récupérer la valeur par exemple de :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ns4:qos>
    <ns4:id>diskspace</ns4:id>
    <ns4:hard>10485760</ns4:hard>
    </ns4:qos>
    contenus dans les balise qos

    Comment dois-je faire pour récupérer la valeur 10485760de la balise hard ? La ligne correspondante dans le script perl est la suivante : On me dis d'utiliser Xpath (ce que j'essaie) mais ça ne marche pas. Les autres "affichage" dans le script perl fonctionne bien (exemple le status) car se sont des balises XML "simple".

    <td>[+ $info->findvalue( 'vzlt:virtual_config/qos/@diskspace/following', $vz ) +]</td>

    Quelqu'un peut m'aider ?

    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    use XML::Twig;
     
    ##...
     
     
    sub f_hard() {
        my ($t, $elt) = @_;
        my $value = $elt->first_child->pcdata();
        my $tag= $elt->name();
        print "tag: $tag, value: $value\n"; 
    }
     
    my $handlers = {
        "ns4:hard" =>  \&f_hard, 
    };
     
    $t -> setTwigHandlers ($handlers);

    Ça marche ici.

    Ellinguista

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de ta réponse. Maintenant je ne comprend pas ou inclure ton code dans ma page .htm . J'ai inséré ton code à la place de ma balise.

    <td>[+ $info->findvalue( 'vzlt:virtual_config/qos/@diskspace/following', $vz ) +]</td>

    mais j'ai beaucoup d'erreurs. Le dev n'est vraiment pas mon truc alors l'erreur te paraîtras peut être évidente.

    Merci.

    Julien.

Discussions similaires

  1. commande awk dans script perl
    Par sorilazer dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2007, 10h16
  2. Inclusion programme C dans script perl
    Par duedos dans le forum Langage
    Réponses: 10
    Dernier message: 09/07/2006, 00h20
  3. script perl dans script perl et retour derreur..
    Par kiza dans le forum Langage
    Réponses: 7
    Dernier message: 02/12/2005, 15h36
  4. [langage] Probleme avec caractère '$' dans script Perl
    Par zouetchou dans le forum Langage
    Réponses: 11
    Dernier message: 24/07/2004, 15h35
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo