我试图在Power
shell中编辑一些xml.这是我在做什么:
$path = 'C:\Projects\NuGetTestPackage\NuGetTestPackage' $projName = 'NuGetTestPackage1.csproj' cd $path $file = gi $projName $pattern = 'TextTemplatingFileGenerator' $xml = [xml](gc $file) $node = [xml] $xml.Project.ItemGroup.None.Generator | Where { $_.Project.ItemGroup.None.Generator -eq $pattern } | Foreach {$_.Project.ItemGroup.None.Generator = ''} $xml.Save($file.Fullname)
这是XML:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">Anycpu</Platform> <ProductVersion> </ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{E750ACF1-17B5-4D83-8FC8-5A4488193099}</ProjectGuid> <ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> <OutputType>Library</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>NuGetTestPackage</RootNamespace> <AssemblyName>NuGetTestPackage</AssemblyName> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <MvcBuildViews>false</MvcBuildViews> <UseIISExpress>false</UseIISExpress> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Anycpu' "> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Anycpu' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>bin\</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> <Reference Include="EntityFramework,Version=4.1.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089,processorArchitecture=MSIL"> <Private>True</Private> <HintPath>..\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.dll</HintPath> </Reference> <Reference Include="System.Data.Entity" /> <Reference Include="System.Web.Mvc,Version=3.0.0.0,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL" /> <Reference Include="System.Web.WebPages,Version=1.0.0.0,processorArchitecture=MSIL" /> <Reference Include="System.Web.Helpers,processorArchitecture=MSIL" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="System" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> <Reference Include="System.Web.DynamicData" /> <Reference Include="System.Web.Entity" /> <Reference Include="System.Web.ApplicationServices" /> <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Core" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Web" /> <Reference Include="System.Web.Extensions" /> <Reference Include="System.Web.Abstractions" /> <Reference Include="System.Web.Routing" /> <Reference Include="System.Xml" /> <Reference Include="System.Configuration" /> <Reference Include="System.Web.Services" /> <Reference Include="System.EnterpriseServices" /> </ItemGroup> <ItemGroup> <Compile Include="Application\ApplicationConfigurationSettings.cs" /> <Compile Include="Global.asax.cs"> <DependentUpon>Global.asax</DependentUpon> </Compile> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <Content Include="Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png" /> <Content Include="Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png" /> <Content Include="Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png" /> <Content Include="Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png" /> <Content Include="Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png" /> <Content Include="Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png" /> <Content Include="Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png" /> <Content Include="Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png" /> <Content Include="Content\themes\base\images\ui-icons_222222_256x240.png" /> <Content Include="Content\themes\base\images\ui-icons_2e83ff_256x240.png" /> <Content Include="Content\themes\base\images\ui-icons_454545_256x240.png" /> <Content Include="Content\themes\base\images\ui-icons_888888_256x240.png" /> <Content Include="Content\themes\base\images\ui-icons_cd0a0a_256x240.png" /> <Content Include="Content\themes\base\jquery.ui.accordion.css" /> <Content Include="Content\themes\base\jquery.ui.all.css" /> <Content Include="Content\themes\base\jquery.ui.autocomplete.css" /> <Content Include="Content\themes\base\jquery.ui.base.css" /> <Content Include="Content\themes\base\jquery.ui.button.css" /> <Content Include="Content\themes\base\jquery.ui.core.css" /> <Content Include="Content\themes\base\jquery.ui.datepicker.css" /> <Content Include="Content\themes\base\jquery.ui.dialog.css" /> <Content Include="Content\themes\base\jquery.ui.progressbar.css" /> <Content Include="Content\themes\base\jquery.ui.resizable.css" /> <Content Include="Content\themes\base\jquery.ui.selectable.css" /> <Content Include="Content\themes\base\jquery.ui.slider.css" /> <Content Include="Content\themes\base\jquery.ui.tabs.css" /> <Content Include="Content\themes\base\jquery.ui.theme.css" /> <Content Include="Global.asax" /> <Content Include="Content\Site.css" /> <Content Include="Scripts\jquery-1.5.1-vsdoc.js" /> <Content Include="Scripts\jquery-1.5.1.js" /> <Content Include="Scripts\jquery-1.5.1.min.js" /> <Content Include="Scripts\jquery-ui-1.8.11.js" /> <Content Include="Scripts\jquery-ui-1.8.11.min.js" /> <Content Include="Scripts\jquery.validate-vsdoc.js" /> <Content Include="Scripts\jquery.validate.js" /> <Content Include="Scripts\jquery.validate.min.js" /> <Content Include="Scripts\modernizr-1.7.js" /> <Content Include="Scripts\modernizr-1.7.min.js" /> <Content Include="T4\WebConfigSettingGeneratorScript.txt"> <AutoGen>True</AutoGen> <DesignTime>True</DesignTime> <DependentUpon>WebConfigSettingGeneratorScript.tt</DependentUpon> </Content> <Content Include="T4\WebConfigSettingGeneratorScript1.txt" /> <Content Include="Web.config" /> <Content Include="Web.Debug.config"> <DependentUpon>Web.config</DependentUpon> </Content> <Content Include="Web.Release.config"> <DependentUpon>Web.config</DependentUpon> </Content> <Content Include="Scripts\jquery.unobtrusive-ajax.js" /> <Content Include="Scripts\jquery.unobtrusive-ajax.min.js" /> <Content Include="Scripts\jquery.validate.unobtrusive.js" /> <Content Include="Scripts\jquery.validate.unobtrusive.min.js" /> <Content Include="Scripts\MicrosoftAjax.js" /> <Content Include="Scripts\MicrosoftAjax.debug.js" /> <Content Include="Scripts\MicrosoftMvcAjax.js" /> <Content Include="Scripts\MicrosoftMvcAjax.debug.js" /> <Content Include="Scripts\MicrosoftMvcValidation.js" /> <Content Include="Scripts\MicrosoftMvcValidation.debug.js" /> <Content Include="Views\Web.config" /> <Content Include="Views\_ViewStart.cshtml" /> <Content Include="Views\Shared\Error.cshtml" /> <Content Include="Views\Shared\_Layout.cshtml" /> </ItemGroup> <ItemGroup> <Folder Include="Controllers\" /> <Folder Include="Models\" /> </ItemGroup> <ItemGroup> <Content Include="packages.config" /> </ItemGroup> <ItemGroup> <None Include="CodeTemplates\AddController\Controller.tt" /> <None Include="CodeTemplates\AddController\ControllerWithContext.tt" /> <None Include="CodeTemplates\AddView\CSHTML\Create.tt" /> <None Include="CodeTemplates\AddView\CSHTML\Delete.tt" /> <None Include="CodeTemplates\AddView\CSHTML\Details.tt" /> <None Include="CodeTemplates\AddView\CSHTML\Edit.tt" /> <None Include="CodeTemplates\AddView\CSHTML\Empty.tt" /> <None Include="CodeTemplates\AddView\CSHTML\List.tt" /> <None Include="T4\Generators\WebConfigGenerator.tt" /> <None Include="T4\Templates\WebConfigTemplate.tt" /> <None Include="T4\WebConfigSettingGeneratorScript.tt"> <Generator>TextTemplatingFileGenerator</Generator> <LastGenOutput>WebConfigSettingGeneratorScript.txt</LastGenOutput> </None> <None Include="T4\WebConfigSettingGeneratorScript.tt.log"> <DependentUpon>WebConfigSettingGeneratorScript.tt</DependentUpon> </None> </ItemGroup> <ItemGroup> <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <!-- To modify your build process,add your task inside one of the targets below and uncomment it. Other similar extension points exist,see Microsoft.Common.targets. <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> --> <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> <ProjectExtensions> <VisualStudio> <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> <WebProjectProperties> <UseIIS>False</UseIIS> <AutoAssignPort>True</AutoAssignPort> <DevelopmentServerPort>55059</DevelopmentServerPort> <DevelopmentServerVPath>/</DevelopmentServerVPath> <IISUrl> </IISUrl> <NTLMAuthentication>False</NTLMAuthentication> <UseCustomServer>False</UseCustomServer> <CustomServerUrl> </CustomServerUrl> <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> </WebProjectProperties> </FlavorProperties> </VisualStudio> </ProjectExtensions> </Project>
这个想法是清除Generator节点的值.我似乎无法让这段代码工作.我正在访问xml属性吗?看起来我每个都有一个值,但我无法正确访问它.
好的,谢谢@Keith Hill.这是答案:
$path = 'C:\Projects\NuGetTestPackage\NuGetTestPackage' $ns = @{msb = 'http://schemas.microsoft.com/developer/msbuild/2003'} cd $path $results = 0 $projName = 'NuGetTestPackage1.csproj' $file = gi $projName $xml = [xml](gc $projName) $xml | Select-Xml "//msb:Generator" -Namespace $ns | Foreach { $_.Node.set_InnerText('') $results = 1 } if($results -eq 1){ $xml.Save($file.FullName) }
这是因为您有多个“ItemGroup”元素和多个“None”元素.此时,ItemGroup是一个集合,没有“.None”属性.你最好使用XPath IMO,例如:
原文链接:https://www.f2er.com/xml/292129.html$ns = @{msb = 'http://schemas.microsoft.com/developer/msbuild/2003'} $pattern = 'TextTemplatingFileGenerator' $xml = [xml](gc C:\temp\test.csproj) $xml | Select-Xml "//msb:Generator[text() = $pattern]" -Namespace $ns | Foreach {$_.Node.set_InnerText('')} $xml.Save('C:\temp\test.csproj')