2011-05-18 20 views
10

मैं पावरहेल में कुछ एक्सएमएल संपादित करने की कोशिश कर रहा हूं। यहाँ मैं क्या कर रहा है:पावरशेल का उपयोग करके मैं 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 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, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 
    <Reference Include="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 
    <Reference Include="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 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> 

विचार जेनरेटर नोड के मूल्य को अनुमति देना। मुझे यह कोड काम करने के लिए प्रतीत नहीं होता है। क्या मैं एक्सएमएल गुणों को गलत तरीके से एक्सेस कर रहा हूं? ऐसा लगता है कि मुझे प्रत्येक के लिए एक मूल्य वापस मिलता है, लेकिन मुझे इसे सही तरीके से एक्सेस करने में समस्या हो रही है।


ठीक है, धन्यवाद @ केथ हिल।

$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) 
} 
+0

क्या आपने "पैटर्न" स्ट्रिंग को भूल लिया? मैं नहीं समझता कि यह कैसे काम करेगा, जैसा है? – D3vtr0n

+2

मुझे इस प्रश्न के शीर्षक के रूप में सामान्य और विवरण के रूप में उत्तर देखना अच्छा लगेगा। –

उत्तर

13

इसका कारण यह है कि आप क्या हो रहा है एक से अधिक "आइटम समूह" तत्व और एक से अधिक "कोई नहीं" तत्व है। उस समय, आइटम समूह एक संग्रह है और इसमें "कोई नहीं" संपत्ति नहीं है। आप XPath IMO का उपयोग करना बेहतर होगा .:

$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') 
+0

मैं असहमत नहीं हूं। लेकिन, जब मैंने कोशिश की कि मैं नाडा के साथ खत्म हो गया हूं। यहां तक ​​कि आपके कोड का परीक्षण करते समय, जो अच्छा लग रहा है, मुझे अभी भी एनएडीए मिल रहा है। कोई विचार? –

+0

ठीक है, अधिक जानकारी। अगर मैं Foreach {$ _। नोड.इनरटेक्स्ट} कहता हूं, तो मुझे सही मान मिल जाएगा। यह मान मूल्य निर्धारित करने में प्रतीत होता है। –

+1

हम्म, यह आपके लिए ऊपर प्रदान की गई सी # प्रोजेक्ट फ़ाइल (PowerShell 2.0) के लिए मेरे लिए काम करता है। आप यह देखने के लिए कि क्या यह काम करता है, आप '$ _। Node.set_InnerText ('') 'को आजमा सकते हैं। बीटीडब्ल्यू, परिभाषित करें कि "एनएडीए के साथ समाप्त" क्या है? क्या अद्यतन सी # प्रोजेक्ट फ़ाइल में कुछ भी नहीं है? –

3

मैं वास्तव में आपकी समस्या

$file = get-item "c:\Yourfile.xml" 

$xml = [xml](get-content $file) 

$xml.Project.ItemGroup.None.Generator = "" 

$xml.Save("c:\YourModifiedFile.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> 
    </ItemGroup> 
</Project> 
+0

यह एक त्रुटि उत्पन्न करता है। क्या यह नहीं होना चाहिए? - इस वस्तु पर प्रजनन 'जनरेटर' नहीं पाया जा सकता है; सुनिश्चित करें कि यह मौजूद है और सेटटेबल है। –

+0

हम्मम्म ... मैंने अपने एक्सएमएल को केवल वही किया जो मैंने आपको प्रदान किया था और अब यह काम करता है। शायद मुझे यह समस्या हो रही है क्योंकि मेरा एक्सएमएल बहुत जटिल है? –

संबंधित मुद्दे

 संबंधित मुद्दे