XML espace dans les noms de noeud, acces en python

XML espace dans les noms de noeud, acces en python - XML/XSL - Programmation

Marsh Posté le 29-03-2021 à 09:58:17    

J'aimerais changer en python la valeur de la mac address dans la definition d'une VM libvirt mais je suis confronté aux espaces dans les noms de noeuds.
Quel méthode d'acces conseillez vous ?
 

Code :
  1. <domain type="kvm">
  2.   <name>travail</name>
  3.   <uuid>53c9aafe-68b4-44cf-8f34-8a0cf3aa2973</uuid>
  4.   <metadata>
  5.     <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
  6.       <libosinfo:os id="http://microsoft.com/win/10"/>
  7.     </libosinfo:libosinfo>
  8.   </metadata>
  9.   <memory unit="KiB">4194304</memory>
  10.   <currentMemory unit="KiB">4194304</currentMemory>
  11.   <vcpu placement="static">2</vcpu>
  12.   <os>
  13.     <type arch="x86_64" machine="pc-q35-4.0">hvm</type>
  14.   </os>
  15.   <features>
  16.     <acpi/>
  17.     <apic/>
  18.     <hyperv>
  19.       <relaxed state="on"/>
  20.       <vapic state="on"/>
  21.       <spinlocks state="on" retries="8191"/>
  22.     </hyperv>
  23.     <vmport state="off"/>
  24.   </features>
  25.   <cpu mode="host-model" check="partial"/>
  26.   <clock offset="localtime">
  27.     <timer name="rtc" tickpolicy="catchup"/>
  28.     <timer name="pit" tickpolicy="delay"/>
  29.     <timer name="hpet" present="no"/>
  30.     <timer name="hypervclock" present="yes"/>
  31.   </clock>
  32.   <on_poweroff>destroy</on_poweroff>
  33.   <on_reboot>restart</on_reboot>
  34.   <on_crash>destroy</on_crash>
  35.   <pm>
  36.     <suspend-to-mem enabled="no"/>
  37.     <suspend-to-disk enabled="no"/>
  38.   </pm>
  39.   <devices>
  40.     <emulator>/usr/bin/qemu-system-x86_64</emulator>
  41.     <disk type="file" device="disk">
  42.       <driver name="qemu" type="raw"/>
  43.       <source file="/var/lib/libvirt/images/travail.img"/>
  44.       <target dev="sda" bus="sata"/>
  45.       <boot order="2"/>
  46.       <address type="drive" controller="0" bus="0" target="0" unit="0"/>
  47.     </disk>
  48.     <controller type="usb" index="0" model="qemu-xhci" ports="15">
  49.       <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
  50.     </controller>
  51.     <controller type="sata" index="0">
  52.       <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
  53.     </controller>
  54.     <controller type="pci" index="0" model="pcie-root"/>
  55. ....
  56.     <controller type="pci" index="5" model="pcie-root-port">
  57.       <model name="pcie-root-port"/>
  58.       <target chassis="5" port="0x14"/>
  59.       <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
  60.     </controller>
  61.     <controller type="virtio-serial" index="0">
  62.       <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
  63.     </controller>
  64.     <interface type="bridge">
  65.       <mac address="00:15:5d:06:f5:01"/>
  66.       <source bridge="br_vlan2"/>
  67.       <model type="e1000e"/>
  68.       <boot order="1"/>
  69.       <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
  70.     </interface>
  71.     <serial type="pty">
  72.       <target type="isa-serial" port="0">
  73.         <model name="isa-serial"/>
  74.       </target>
  75.     </serial>
  76.    ...
  77.     <video>
  78.       <model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/>
  79.       <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
  80.     </video>
  81.     <redirdev bus="usb" type="spicevmc">
  82.       <address type="usb" bus="0" port="2"/>
  83.     </redirdev>
  84.     <redirdev bus="usb" type="spicevmc">
  85.       <address type="usb" bus="0" port="3"/>
  86.     </redirdev>
  87.     <memballoon model="virtio">
  88.       <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
  89.     </memballoon>
  90.   </devices>
  91. </domain>

Message cité 1 fois
Message édité par isanaud le 29-03-2021 à 10:51:57
Reply

Marsh Posté le 29-03-2021 à 09:58:17   

Reply

Marsh Posté le 29-03-2021 à 21:26:07    

Tu cherches peut-être complètement autre chose, à savoir virt-sysprep? https://libguestfs.org/virt-sysprep.1.html


Message édité par rat de combat le 29-03-2021 à 21:26:12
Reply

Marsh Posté le 07-05-2021 à 14:44:58    

Bonjour,

 

un accès Xml , c'est à dire 'lire' un fichier , ou le contenu d'une balise Xml dans un fichier en contenant des milliers,

 

ça se fait par utilisation de la hierarchie Xml , c'est un ensemble de noeuds et de sous noeuds.

 


Les méthodes dans les Xml Reader elles permettent des accès différents :
- accès par la sémantique d'une balise XmlReader ->get_<exemple>

 

- accès par la valeur d'un attribut ... ->get ( id = ?????? )  , ou  Name= ?????

 

c'est vraiment les accès les plus précis, les plus détaillés.

 

Les espaces de noms, c'est des indications sur des 'membres' de ton fichier Xml ...
en fait, ta liste Xml contient d'autres "fichiers" Xml ...
c'est aussi un schéma, une référence pour un Type Xml ...
donc un 'hive' d'espace de noms , et une écriture pour un élèment ( déjà référencé par des organismes Xml )

 

C'est aussi de la normalisation , on va pas le réécrire encore, ni le rendre incompatible cet "être Xml".

 


Le souci de "l'espace"  dans les balises, c'est un problème de validation,
ta ressource Python est mal utilisée, ou il manque un paramètre à ton validateur.
tu a des niveaux de validation { strict // ..... etc ... }
c'est comme ON / OFF ..
c'est une lecture + souple qui se fera pour ton fichier.

 

et pour les schèmas , et faire toi même ton motif de validation : c'est "Xsd"  et "Xml Validator" [  une autre syntaxe  ;)  ]


Message édité par djinto le 07-05-2021 à 15:17:35
Reply

Marsh Posté le 07-05-2021 à 16:16:05    

isanaud a écrit :

J'aimerais changer en python la valeur de la mac address dans la definition d'une VM libvirt mais je suis confronté aux espaces dans les noms de noeuds.


Il n'y a pas d'espaces dans les noms de noeuds en XML, ça n'existe pas. D'ailleurs le bordel que tu postes n'en a pas.
 
Et si tu es en python, la librairie standard a plusieurs paquets permettant de lire, interroger, et écrire du XML.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-05-2021 à 18:52:18    

je fais certainement une erreur de vocabulaire mais l'élément  mac address  
     a bien espace et il me pose un soucis pour récupérer la valeur associée.

Reply

Marsh Posté le 10-05-2021 à 18:56:56    

isanaud a écrit :

je fais certainement une erreur de vocabulaire


C'est pas une erreur de vocabulaire c'est une totale méconnaissance et incompréhension du format.

isanaud a écrit :

mais l'élément  mac address a bien espace et il me pose un soucis pour récupérer la valeur associée


C'est un attribut. L'élément a un attribut. C'est l'une des principales structures logiques du XML. N'importe quelle lib XML permet d'accéder aux attributs et de récupérer la valeur associée.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-05-2021 à 21:06:54    

masklinn a écrit :


C'est pas une erreur de vocabulaire c'est une totale méconnaissance et incompréhension du format.

 
masklinn a écrit :


C'est un attribut. L'élément a un attribut. C'est l'une des principales structures logiques du XML.


Si tu as un lien vers un site qui explique ça simplement, je suis preneur :jap:


Message édité par isanaud le 10-05-2021 à 21:07:57
Reply

Marsh Posté le 10-05-2021 à 23:09:26    

Reply

Marsh Posté le 12-05-2021 à 09:00:14    

Tout ce que t'as à faire, c'est collecter les nœuds <uuid>, les parcourir en changeant leur valeur et enregistrer le résultat.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed