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