|
# usage:.\autoreadxml.ps1 -xmlfile <xml file fullname> -val "<value(s)* to find>" -node "<reference node>"
param($xmlfile, $val, $node)
# Vérifier si la valeur contient un astérisque et activer le mode 'like'
if ($val -match '\*') {$global:like = $true}
# Fonction pour chercher dans le fichier XML
function getxmlheaders {
param($FileXml, $find, $node, [switch]$like)
[xml]$GCXML = Get-Content $FileXml
[string]$1stNodeName = $GCXML.DocumentElement.Name
$XmlsubHeaders = ($GCXML.SelectNodes("//$1stNodeName/*") | Select-Object -Property Name -Unique).Name
$result = @() # Initialisation d'un tableau pour stocker les résultats
foreach ($XmlsubHeader in $XmlsubHeaders) {
$props = ($GCXML.SelectNodes("//$1stNodeName/$XmlsubHeader/*") | Select-Object -Property Name -Unique).Name
foreach ($prop in $props) {
$value = ($GCXML.SelectSingleNode("//$1stNodeName/$XmlsubHeader/$prop")).InnerText
# Vérifier les correspondances avec $node et les valeurs
if (($XmlsubHeader.ToUpper() -eq $node.ToUpper()) -or ($prop.ToUpper() -eq $node.ToUpper())) {
if ($like) {
if ($value.ToUpper() -like $find.ToUpper()) {$result += "$1stNodeName/$XmlsubHeader/$prop"}
} else {
if ($value.ToUpper() -eq $find.ToUpper()) {$result += "$1stNodeName/$XmlsubHeader/$prop"}
}
}
}
}
return $result
}
# Fonction pour lire la valeur d'un chemin XML spécifique
function ReadXmlSpecPath {
param($FileXml, $path)
[xml]$xmlContent = Get-Content $FileXml
# Sélectionner le nœud souhaité
$node = $xmlContent.SelectSingleNode($path)
# Retourner la valeur du nœud
if ($node) {return $node.InnerText}
}
# Obtenir les chemins des valeurs recherchées
if ($like) {$subValuePaths = getxmlheaders -FileXml $xmlfile -find $val -node $node -like}
else {$subValuePaths = getxmlheaders -FileXml $xmlfile -find $val -node $node}
# Si plusieurs résultats sont trouvés, les lire un par un
$resultat = @() # Initialisation d'un tableau pour les valeurs
if ($subValuePaths) {
foreach ($subValuePath in $subValuePaths) {
$XmlSubValue = ReadXmlSpecPath -FileXml $xmlfile -path $subValuePath
$resultat += "$subValuePath/$XmlSubValue"
}
}
return $resultat
|
Commenter cet article