Извлечение XML-содержимого переменной

#xml #powershell

#xml #powershell

Вопрос:

Раньше у меня был XML-файл, который заполнял переменную ([xml]$modificationData = Get-Content $modificationXmlFileName) , но теперь я не могу сохранить файл и должен поместить его в другой файл данных. формат, в котором мне сказали это сделать, таков:

 xmldata = @'
  <bigSection>
    <smallSection>
      <changes>
      </changes>
    </smallSection>
  </bigSection>
'@
  

Я не уверен, будет ли Get-Content командлет работать сейчас, если я перенаправлю его на эту новую переменную, и я не совсем уверен, что еще я мог бы использовать.

Кроме того, я не знаю, что @''@ означает перенос кода. Я думал @ , что символ использовался для массивов, но я не думаю, что он делает это в данном случае.

Любые разъяснения были бы полезны.

Ответ №1:

@'...'@ Синтаксис называется строкой here или документом here . Это способ указания строки без использования экранирующих символов.

Get-Content предназначен для чтения файлов. Когда вы вызываете его по умолчанию, он возвращает массив строк, если только вы не вызываете его с -Raw параметром (и тогда он вернет одну большую строку со всем содержимым файла).

Итак, в вашем примере $xmldata это то же самое, как если бы вы вызвали Get-Content $modificationXmlFileName -Raw .

Поскольку вы просто пытаетесь выполнить приведение к [xml] , вы можете просто сделать это:

 $xmldata = [xml]@'
...
'@
  

Ответ №2:

'@' @' Синтаксис называется here-string, который представляет многострочную строку без интерполяции.

Вы не должны / не можете использовать Get-Content командлет, использующий переменную, вместо этого просто преобразуйте его в xml:

 [xml]$modificationData  = xmldata
  

Комментарии:

1. Хорошо, я только добавлю, что обычные строки в PowerShell могут содержать буквальные переводы строк, и они все еще работают