Question
Récupérer l'id d'un noeud xml
- DUMOULIN
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 21
- Remerciements reçus 0
il y a 15 ans 6 mois #7831
par DUMOULIN
Récupérer l'id d'un noeud xml a été créé par DUMOULIN
Bonjour,
J'ai un fichier xml sous cette forme :
[code:1]
- <oss>
- <os guid=\"{ZZZZZZ}\" enable=\"True\">
<Name>Windows Server 2003 AA</Name>
</os>
- <os guid=\"{YYYYYY}\" enable=\"True\">
<Name>Windows Server 2003 BB</Name>
</os>
- <os guid=\"{XXXXXX}\" enable=\"True\">
<Name>Windows Server 2003 CC</Name>
</os>
- <os guid=\"{WWWWWW}\" enable=\"True\">
<Name>Windows Server 2003 DD</Name>
</os>
</oss>
[/code:1]
J'aurais besoin de connaître les Ids des noeuds contenant les guid ZZZZZZ et XXXXXX pour récupérer ce qu'il y a dans le tag Name par exemple comme ça :
[code:1]
[xml]$listOS = get-content \"\\Serveur\OperatingSystems.xml\"
foreach ($Line in $listOS)
{
$DefList = $ListOS.oss.os[$IdXMLNode].Name
}
[/code:1]
Si vous avez une idée... Je suis preneur !
Merci de votre aide,
Harfango
J'ai un fichier xml sous cette forme :
[code:1]
- <oss>
- <os guid=\"{ZZZZZZ}\" enable=\"True\">
<Name>Windows Server 2003 AA</Name>
</os>
- <os guid=\"{YYYYYY}\" enable=\"True\">
<Name>Windows Server 2003 BB</Name>
</os>
- <os guid=\"{XXXXXX}\" enable=\"True\">
<Name>Windows Server 2003 CC</Name>
</os>
- <os guid=\"{WWWWWW}\" enable=\"True\">
<Name>Windows Server 2003 DD</Name>
</os>
</oss>
[/code:1]
J'aurais besoin de connaître les Ids des noeuds contenant les guid ZZZZZZ et XXXXXX pour récupérer ce qu'il y a dans le tag Name par exemple comme ça :
[code:1]
[xml]$listOS = get-content \"\\Serveur\OperatingSystems.xml\"
foreach ($Line in $listOS)
{
$DefList = $ListOS.oss.os[$IdXMLNode].Name
}
[/code:1]
Si vous avez une idée... Je suis preneur !
Merci de votre aide,
Harfango
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 6 mois #7834
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Récupérer l'id d'un noeud xml
Tu peux utiliser Xpath :
[code:1]
#ps v2
[xml]$Datas=GC g:\temp\Test.xml
$Nodes=$Datas|
#Collision de nom avec PSCX
Microsoft.PowerShell.Utility\Select-Xml -XPath '//os[@guid = \"{ZZZZZZ}\" or @guid =\"{XXXXXX}\"]'
$Nodes|% {$_.Node.Name}
[/code:1]
Le problème est d'apprendre la syntaxe, comme avec les regex, mais en moins difficile.
Sinon il te faut parcourir chaque attribut de chaque noeud du document XML cible.
Voir aussi :
xml.developpez.com/faq/?page=2
cours.ebsi.umontreal.ca/SCI6132/H2010/matthem/intro-XPath.ppt
jerome.developpez.com/xmlxsl/xpath/
www.dil.univ-mrs.fr/~massat/ens/xml/4-xpath.html
msdn.microsoft.com/fr-fr/library/ms256471.aspx
[code:1]
#ps v2
[xml]$Datas=GC g:\temp\Test.xml
$Nodes=$Datas|
#Collision de nom avec PSCX
Microsoft.PowerShell.Utility\Select-Xml -XPath '//os[@guid = \"{ZZZZZZ}\" or @guid =\"{XXXXXX}\"]'
$Nodes|% {$_.Node.Name}
[/code:1]
Le problème est d'apprendre la syntaxe, comme avec les regex, mais en moins difficile.
Sinon il te faut parcourir chaque attribut de chaque noeud du document XML cible.
Voir aussi :
xml.developpez.com/faq/?page=2
cours.ebsi.umontreal.ca/SCI6132/H2010/matthem/intro-XPath.ppt
jerome.developpez.com/xmlxsl/xpath/
www.dil.univ-mrs.fr/~massat/ens/xml/4-xpath.html
msdn.microsoft.com/fr-fr/library/ms256471.aspx
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 15 ans 6 mois #7835
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Récupérer l'id d'un noeud xml
Bonjour,
Je te conseille de regarder du côté du xPath pour faire de la recherche dans du xml, par exemple ta demande serait :
[code:1]
[xml]$listOS = gc '\\Serveur\OperatingSystems.xml'
$listOS.SelectNodes(\"//oss/os[@guid='{ZZZZZZ}' or @guid='{XXXXXX}']\"«»)[/code:1]
Cela retourne un objet System.Xml.XPathNodeList que tu parcours avec un simple foreach
[code:1]
$listOS.SelectNodes(\"//oss/os[@guid='{ZZZZZZ}' or @guid='{XXXXXX}']\"«») | %{$_.Name}
[/code:1]
Et donc tu as pour résultat :
[code:1]
Windows Server 2003 AA
Windows Server 2003 CC
[/code:1]
Bien Cordialement,
Richard Lazaro.<br><br>Message édité par: Richard Lazaro, à: 21/09/10 11:34
Je te conseille de regarder du côté du xPath pour faire de la recherche dans du xml, par exemple ta demande serait :
[code:1]
[xml]$listOS = gc '\\Serveur\OperatingSystems.xml'
$listOS.SelectNodes(\"//oss/os[@guid='{ZZZZZZ}' or @guid='{XXXXXX}']\"«»)[/code:1]
Cela retourne un objet System.Xml.XPathNodeList que tu parcours avec un simple foreach
[code:1]
$listOS.SelectNodes(\"//oss/os[@guid='{ZZZZZZ}' or @guid='{XXXXXX}']\"«») | %{$_.Name}
[/code:1]
Et donc tu as pour résultat :
[code:1]
Windows Server 2003 AA
Windows Server 2003 CC
[/code:1]
Bien Cordialement,
Richard Lazaro.<br><br>Message édité par: Richard Lazaro, à: 21/09/10 11:34
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- DUMOULIN
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 21
- Remerciements reçus 0
il y a 15 ans 6 mois #7837
par DUMOULIN
Réponse de DUMOULIN sur le sujet Re:Récupérer l'id d'un noeud xml
Rebonjour et merci beaucoup pour cette aide précieuse !
L'objectif final étant de \"remplir\" les items d'une Combobox, ci-joint le script finalisé :
[code:1]
$CBoxOS.Items.clear()
[xml]$ListOSGroup = get-content \"\\$IP\DeploymentShare$\Control\OperatingSystemGroups.xml\"
$OSEnableList = $ListOSGroup.groups.group | Where-Object {$_.Name -eq \"default\"} | %{$_.Member}
[xml]$listOS = get-content \"\\$IP\DeploymentShare$\Control\OperatingSystems.xml\"
foreach ($Line in $OSEnableList)
{
$DefOSList = $listOS.SelectNodes(\"//oss/os[@guid='$Line']\"«») | %{$_.Name} | foreach {$_.SubString(0,$_.IndexOf(' in'))}
foreach ($ListComboOS in $DefOSList)
{
$CBoxOS.Items.Add($ListComboOS)|Out-Null
}
}
[/code:1]
Pour les fichiers xml, voici leur contenu (je ne suis pas arrivé à joindre les 2 fichiers
)
OperatingSystemGroups.xml
[code:1]
<groups>
<group guid=\"{00000000-0000-0000-0000-000000000000}\" enable=\"True\">
<Name>default</Name>
<Comments>default folder (root)</Comments>
<Member>{AAAAAA}</Member>
<Member>{BBBBBB}</Member>
<Member>{CCCCCC}</Member>
<Member>{DDDDDD}</Member>
<Member>{EEEEEE}</Member>
<Member>{FFFFFF}</Member>
<Member>{GGGGGG}</Member>
</group>
<group guid=\"{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\" enable=\"True\">
<Name>hidden</Name>
<Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments>
<Member>{HHHHHH}</Member>
<Member>{IIIIII}</Member>
<Member>{JJJJJJ}</Member>
<Member>{KKKKKK}</Member>
</group>
</groups>
[/code:1]
OperatingSystems.xml (extrait) :
[code:1]
<oss>
<os guid=\"{AAAAAA}\" enable=\"True\">
<Name>Windows Server 2003 Enterprise Edition SP2 source files in Windows Server 2003 Enterprise Edition SP2</Name>
<Description>Windows Server 2003 Enterprise Edition SP2 source files</Description>
</os>
<os guid=\"{BBBBBB}\" enable=\"True\">
<Name>Windows Server 2003 Standard Edition SP2 source files in Windows Server 2003 Standard Edition SP2</Name>
<Description>Windows Server 2003 Standard Edition source files</Description>
</os>
<os guid=\"{CCCCCC}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERSTANDARD in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERSTANDARD</Description>
</os>
<os guid=\"{HHHHHH}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERSTANDARDCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERSTANDARDCORE</Description>
</os>
<os guid=\"{DDDDDD}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERENTERPRISE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERENTERPRISE</Description>
</os>
<os guid=\"{IIIIII}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERENTERPRISECORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERENTERPRISECORE</Description>
</os>
<os guid=\"{EEEEEE}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERDATACENTER in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERDATACENTER</Description>
</os>
<os guid=\"{JJJJJJ}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERDATACENTERCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERDATACENTERCORE</Description>
</os>
<os guid=\"{FFFFFF}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERWEB in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERWEB</Description>
</os>
<os guid=\"{KKKKKK}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERWEBCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERWEBCORE</Description>
</os>
<os guid=\"{GGGGGG}\" enable=\"True\">
</os>
</oss>
[/code:1]
Merci encore pour l'aide et à bientôt, en espérant que ce petit bout de script pourra servir
Harfango
L'objectif final étant de \"remplir\" les items d'une Combobox, ci-joint le script finalisé :
[code:1]
$CBoxOS.Items.clear()
[xml]$ListOSGroup = get-content \"\\$IP\DeploymentShare$\Control\OperatingSystemGroups.xml\"
$OSEnableList = $ListOSGroup.groups.group | Where-Object {$_.Name -eq \"default\"} | %{$_.Member}
[xml]$listOS = get-content \"\\$IP\DeploymentShare$\Control\OperatingSystems.xml\"
foreach ($Line in $OSEnableList)
{
$DefOSList = $listOS.SelectNodes(\"//oss/os[@guid='$Line']\"«») | %{$_.Name} | foreach {$_.SubString(0,$_.IndexOf(' in'))}
foreach ($ListComboOS in $DefOSList)
{
$CBoxOS.Items.Add($ListComboOS)|Out-Null
}
}
[/code:1]
Pour les fichiers xml, voici leur contenu (je ne suis pas arrivé à joindre les 2 fichiers
OperatingSystemGroups.xml
[code:1]
<groups>
<group guid=\"{00000000-0000-0000-0000-000000000000}\" enable=\"True\">
<Name>default</Name>
<Comments>default folder (root)</Comments>
<Member>{AAAAAA}</Member>
<Member>{BBBBBB}</Member>
<Member>{CCCCCC}</Member>
<Member>{DDDDDD}</Member>
<Member>{EEEEEE}</Member>
<Member>{FFFFFF}</Member>
<Member>{GGGGGG}</Member>
</group>
<group guid=\"{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\" enable=\"True\">
<Name>hidden</Name>
<Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments>
<Member>{HHHHHH}</Member>
<Member>{IIIIII}</Member>
<Member>{JJJJJJ}</Member>
<Member>{KKKKKK}</Member>
</group>
</groups>
[/code:1]
OperatingSystems.xml (extrait) :
[code:1]
<oss>
<os guid=\"{AAAAAA}\" enable=\"True\">
<Name>Windows Server 2003 Enterprise Edition SP2 source files in Windows Server 2003 Enterprise Edition SP2</Name>
<Description>Windows Server 2003 Enterprise Edition SP2 source files</Description>
</os>
<os guid=\"{BBBBBB}\" enable=\"True\">
<Name>Windows Server 2003 Standard Edition SP2 source files in Windows Server 2003 Standard Edition SP2</Name>
<Description>Windows Server 2003 Standard Edition source files</Description>
</os>
<os guid=\"{CCCCCC}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERSTANDARD in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERSTANDARD</Description>
</os>
<os guid=\"{HHHHHH}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERSTANDARDCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERSTANDARDCORE</Description>
</os>
<os guid=\"{DDDDDD}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERENTERPRISE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERENTERPRISE</Description>
</os>
<os guid=\"{IIIIII}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERENTERPRISECORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERENTERPRISECORE</Description>
</os>
<os guid=\"{EEEEEE}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERDATACENTER in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERDATACENTER</Description>
</os>
<os guid=\"{JJJJJJ}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERDATACENTERCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERDATACENTERCORE</Description>
</os>
<os guid=\"{FFFFFF}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERWEB in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERWEB</Description>
</os>
<os guid=\"{KKKKKK}\" enable=\"True\">
<Name>Windows Server 2008 R2 SERVERWEBCORE in Windows Server 2008 R2 x64 install.wim</Name>
<Description>Windows Server 2008 R2 SERVERWEBCORE</Description>
</os>
<os guid=\"{GGGGGG}\" enable=\"True\">
</os>
</oss>
[/code:1]
Merci encore pour l'aide et à bientôt, en espérant que ce petit bout de script pourra servir
Harfango
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer l'id d'un noeud xml