2010-03-22 6 views
4

J'ai besoin d'aide avec PowerShell, s'il vous plaît. Cela devrait être assez facile:Powershell: Lire la valeur à partir de fichiers xml

J'ai une liste de sous-répertoires, avec un fichier xml dans chacun d'eux. Je veux ouvrir chaque fichier XML et imprimer la valeur d'un nœud. Le noeud est toujours le même, car les fichiers xml sont en fait des fichiers projet (* .csproj) de Visual Studio.

J'ai déjà reçu la liste des fichiers: get-item ** \ * .csproj

Comment dois-je procéder?

Répondre

6

Pour obtenir les fichiers csproj utilisent Get-ChildItem

Get-ChildItem c:\myProjects *.csproj -recurse 

Ensuite, vous pouvez utiliser par exemple Select-Xml comme ceci:

$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" } 
Get-ChildItem c:\myProjects *.csproj -recurse | 
    Select-Xml -xpath '//defaultNamespace:PropertyGroup[1]' -namespace $ns | 
    Select-Object -expand Node 

Vous avez à corriger l'espace de noms par défaut. Je n'ai pas de fichier csproj à la main en ce moment.
(pour plus d'informations sur XML et XPath dans PowerShell voir http://huddledmasses.org/xpath-and-namespaces-in-powershell/)

Le Select-Object est nécessaire pour développer la propriété de nœud réel.

Si vous souhaitez travailler avec XML comme avec un objet, vous pouvez utiliser ceci:

Get-ChildItem c:\myProjects *.csproj -recurse | 
    % { $content = [xml](gc $_.FullName); $content.Project.PropertyGroup[someindex...] } 
Questions connexes