我正在解析nuget安裝的csproj文件,並且我有一個需要修改的節點。所討論的節點是名爲「Generator」的節點,其值等於「TextTemplatingFileGenerator」,並且其父節點具有「WebConfigSettingsGeneratorScript.tt」(第二部分尚未在此處)的屬性。PowerShell解析xml並保存更改
這是我得到的腳本,但它沒有完成。它正在工作,但它保存了一個空文件。此外,它沒有我的where子句,這是
$path = 'C:\Projects\Intouch\NuGetTestPackage\NuGetTestPackage'
cd $path
$files = get-childitem -recurse -filter *.csproj
foreach ($file in $files){
""
"Filename: {0}" -f $($file.Name)
"=" * ($($file.FullName.Length) + 10)
if($file.Name -eq 'NuGetTestPackage1.csproj'){
$xml = gc $file.FullName |
Where-Object { $_.Project.ItemGroup.None.Generator -eq 'TextTemplatingFileGenerator' } |
ForEach-Object { $_.Project.ItemGroup.None.Generator = '' }
Set-Content $file.FullName $xml
}
}
這裏是XML的基本版本的第二部分:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="T4\WebConfigSettingGeneratorScript.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>WebConfigSettingGeneratorScript.txt</LastGenOutput>
</None>
非常感謝。我是一個完整的PowerShell n00b!
這會有所幫助,但$ xml.Save($ file.FullName)快到了是無效操作。 – 2011-05-18 13:41:52
如果相應的XmlDocument格式不正確,則記錄XmlDocument.Save(string path)唯一的異常是XmlException。順便說一句,你還應該拋棄'Set-Content $ file.FullName $ xml',因爲'$ xml.Save($ file.Fullname)'調用會保存在原始文件中。 – 2011-05-18 15:32:28
太好了,我已經採取了您提供的更改。但是,它似乎沒有對文件進行更改。但是,該腳本正在保存該文件。 – 2011-05-18 16:08:28