#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 могут содержать буквальные переводы строк, и они все еще работают