2015-03-30 5 views
0
From below web.config file I want to copy the contents to another config file: 
<?xml version="1.0"?>  
    <configSections>...</configSections> 
    <system.webserver>...</system.webserver> 
     <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;"/> 
        <add key="key1" value ="value1"/> 
        <add key="key2" value ="value2"/> 
        <add key="key3" value ="value3"/> 
        <add key="key4" value ="value4"/> 
        .....<add key="key30" value ="value30"/> 
        </appSettings> 
      </configuration> 

Теги, которые были скопированы из выше конфигурационного файла необходимо, чтобы показать, как показано ниже ожидаемого файла конфигурации «web1.config» с следующим содержанием:Как скопировать содержимое XML-файлов из одного XML-файла в другой файл XML с помощью Powershell

From above xml file I want to copy only "ConnectionString,ConnectionString1,ConnectionString2" tags from <appSettings> parent tag as 

<?xml version="1.0"?> 
      <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> 
      <settings> 
      <add key="key1" value ="value1"/> 
        <add key="key2" value ="value2"/> 
        <add key="key3" value ="value3"/> 
        <add key="key4" value ="value4"/> 
        .....<add key="key30" value ="value30"/> 
      </settings> 

ответ

1

сценарий извлекает ключи ConnectionString и значение из эталонного XML с использованием регулярного выражения и добавляет его в XML назначения с использованием System.Xml.XmlDocument.

$referenceXMLPath = 'c:\test1.xml' 
$destinationXMLPath = 'c:\test2.xml' 

$referenceContent = (gc $referenceXMLPath -Raw) 
$destinationContent = [xml](gc $referenceXMLPath -Raw) 

foreach ($connectionString in [regex]::Matches($referenceContent, '<add key="(ConnectionString[^"]*).*value="([^"]*)')) 
{ 
    $key = $connectionString.Groups[1].Value 
    $value = $connectionString.Groups[2].Value 

    $child = $destinationContent.CreateElement("add") 

    $keyAttribute = $destinationContent.CreateAttribute("key") 
    $keyAttribute.Value = $key 
    $child.Attributes.Append($keyAttribute) 

    $valueAttribute = $destinationContent.CreateAttribute("value") 
    $valueAttribute.Value = $value 
    $child.Attributes.Append($valueAttribute) 

    $destinationContent.configuration.appSettings.AppendChild($child) 

} 

$destinationContent.Save($destinationXMLPath) 
+0

В мой файл сценария назначения не have.It должен создать в указанном пути, указанному в скрипте. Необходимо скопировать корневые теги из web.config в web1.config. и порядок настроек приложения должен оставаться таким же в файле web1.config, что и файл web.config. – Praveen

+0

Порядок настроек приложения не имеет отношения к XML. Что вы имеете в виду с копией корневых тегов? Вы написали «Из XML-файла выше. Я хочу скопировать только теги« ConnectionString, ConnectionString1, ConnectionString2 »из . Вы хотите, чтобы вы преобразовали ссылочный xml в новый xml или хотите скопировать только строки подключения из ссылки в пункт назначения? –

+0

Да, чтобы скопировать корневой тег connectionstrings и ключ, значения от key1 до key30 до некоторого корневого тега, например , значения от 1 до 30 к указанному адресу назначения в коде (целевой XML-файл нужен для динамического создания) – Praveen

0

Reference Файл конфигурации:

<?xml version="1.0"?> 
<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;"/> 
      <add key="key1" value ="value1"/> 
      <add key="key2" value ="value2"/> 
      <add key="key3" value ="value3"/> 
      <add key="key4" value ="value4"/> 
      .....<add key="key5" value ="value30"/> 
      </appSettings> 
    </configuration> 

Ожидаемый конфигурационный файл:

<?xml version="1.0"?> 
    <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> 
    <settings> 
    <add key="key1" value ="value1"/> 
      <add key="key2" value ="value2"/> 
      <add key="key3" value ="value3"/> 
      <add key="key4" value ="value4"/> 
      .....<add key="key5" value ="value30"/> 
    </settings> 
+0

нет корневого элемента в ожидаемой конфигурации? –

+0

Возможно, просто используйте мой скрипт в качестве ссылки и приспособите его к вашим потребностям –

+0

Да нет корневого элемента для ожидаемого файла конфигурации – Praveen