Как изменить свойство версии объекта xml в PowerShell? - PullRequest
0 голосов
/ 19 сентября 2018

Я читаю содержимое xml-файла в PowerShell и изменяю его номер версии (с 1.1 до 1.0), прежде чем преобразовать его в xml, чтобы он не вызывал исключение, потому что, как я узнал, версия 1.1 не поддерживается.
Затем я делаю некоторые изменения в контенте и хочу сохранить его в файл, но снова меняю версию с 1.0 на 1.1, как это было, когда я ее читал.

Вот команды, которые я использую:

@'
<?xml version='1.1' encoding='UTF-8'?>  

<Root>  
  <element1>  
    <string>name</string>  
  </element1>  
  <version>3.2.1</version>  
</Root> 
'@ | Out-File Demo.xml

$content = (Get-Content .\Demo.xml)
$replacedVersion = $content.Replace('<?xml version=''1.1'' encoding=''UTF-8''?>','<?xml version=''1.0'' encoding=''UTF-8''?>') 

$XMLFile = [xml]$replacedVersion   
// here I make my changes
//   ...
$pathToSaveAt = "C:\MyDir\newFile.xml"
$XMLFile.Save($pathToSaveAt)  

Но в результате я получаю XML-файл с заголовком, содержащим версию

<?xml version="1.0" encoding="UTF-8" ?>

Я хочу, чтобы это быловерсия 1.1.

В результате я пытаюсь получить xml-файл с содержимым:

<?xml version='1.1' encoding='UTF-8'?>  

<Root>  
  // all the changes I made 
</Root> 

Как мне этого добиться?

1 Ответ

0 голосов
/ 20 сентября 2018

Вам это поможет?

    @'
<?xml version='1.1' encoding='UTF-8'?>  

<Root>  
  <element1>  
    <string>name</string>  
  </element1>  
  <version>3.2.1</version>  
</Root> 
'@ | Out-File Demo.xml


$newContent = @()

$content = (Get-Content .\Demo.xml)
ForEach($Regel In $content){

  if($Regel -match "<?xml*"){
    $newContent +=$Regel 
    $newContent +=""        
    }       
   elseif ($Regel -match "<root>"){
    $newContent += "<Root>"}           
   elseif ($Regel -match "</Root>"){
    $newContent += "</Root>"
    }
  elseif (($Regel -match "<elem*")-or ($Regel -match "<version>3.*")){
    $newContent += '    //test me'
    }
   }
$newContent |Out-File Cdemo.xml

Файл

<?xml version='1.1' encoding='UTF-8'?>  

<Root>
    //test me
    //test me
</Root>
...