2015-03-26 4 views
1

Снизу XML сниппета Я хочу, чтобы удалить только «ConnectionString» тег из <appSettings> родительского тега:Как удалить определенный тег из файла XML с помощью Powershell?

 <configuration> 
     <appSettings> 
      <add key="ConnectionString" value=" Data Source=192.168.1.19;Network Library=DBMSSOCN;Initial Catalog=Demo;Persist Security Info=True; User ID=sa;Password=powershell;Application Name=web;Connect Timeout=200; pooling='true'; Max Pool Size=200;"/> 
      <add key="ConnectionString1" value=" Data Source=192.168.1.19;Network Library=DBMSSOCN;Initial Catalog=Demo;Persist Security Info=True; User ID=sa;Password=powershell;Application Name=web;Connect Timeout=200; pooling='true'; Max Pool Size=200;"/> 
      <add key="ConnectionString2" value=" Data Source=192.168.1.19;Network Library=DBMSSOCN;Initial Catalog=Demo;Persist Security Info=True; User ID=sa;Password=powershell;Application Name=web;Connect Timeout=200; pooling='true'; Max Pool Size=200;"/> 
      </appSettings> 
    </configuration> 

Пожалуйста, дайте мне знать, как это сделать с помощью PowerShell?

ответ

2

Попробуйте это:

# Set file path 
$File = '.\config.xml' 

# Get file contents as XML 
[xml]$xml = Get-Content $File 

# Find node with key="ConnectionString" 
$Remove = $xml.appSettings.configuration.appSettings.add | 
       Where-Object {$_.Key -eq 'ConnectionString'} 

# Remove this node from it's parent 
$xml.appSettings.configuration.appSettings.RemoveChild($Remove) | Out-Null 

# Save file 
$xml.Save($File) 
+0

Спасибо, что это сработало для меня. После удаления строк подключения из тега appSettings. Тем не менее я должен выбрать 30+ тегов из тега appSettings и скопировать выбранные теги в другой XML-файл. Пожалуйста, дайте мне знать, как это сделать? Теги имеют ключевые значения, такие как Praveen

1

Удаление осуществляется родителем узла. Сначала найдите нужный узел, и вы получите его родителя через свойство ParentNode. Затем через родителя удалите дочерний узел через RemoveChild(). Например,

[xml]$doc = cat 'path/to/xml' 
$nodeToRemove = $doc.SelectSingleNode("//add[@key='ConnectionString']") 
$parent = $nodeToRemove.ParentNode 
$parent.RemoveChild($nodeToRemove) 
$doc.Save([console]::out) 
+0

SelectSingleNode не работает в powershell 2.0? Итак, я использовал этот файл $ doc .configuration.appSettings.add | Where-Object {$ _. Key -eq 'ConnectionString'}. При сохранении в файл я получаю ниже ошибки: невозможно преобразовать значение «System.Xml.XmlElement», чтобы ввести «System.Xml.XmlDocument». Ошибка: «Данные на корневом уровне недействительны. Строка 1, позиция 1.« В строке: 11 char: 32 + $ parent = [xml] $ nodeToRemove. <<<< ParentNode + CategoryInfo: NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId: RuntimeException – Praveen