2010-03-22 108 views
4

我需要一些PowerShell幫助。它應該很容易:Powershell:從xml文件讀取值

我有一個子目錄的列表,每個文件中有一個xml文件。我想打開每個xml文件並打印一個節點的值。節點始終是相同的,因爲xml文件實際上是Visual Studio中的項目文件(* .csproj)。

我已經得到的文件列表:獲得項目** \ * .csproj的

我該如何繼續?

回答

6

要獲取的csproj文件使用Get-ChildItem

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

然後你可以使用例如Select-Xml是這樣的:

$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 

你必須糾正默認的命名空間。我現在手邊沒有csproj文件。
(有關XML和XPath在PowerShell中的詳細信息請參見http://huddledmasses.org/xpath-and-namespaces-in-powershell/

Select-Object需要擴大實際的節點屬性。

如果你想使用XML就像對象,你可以使用這個:

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