Итак, я пишу сценарий PowerShell, который проверяет файлы XML в папке на предмет наличия узла. Если его нет, он добавит узел с пустой строкой. Вот как выглядит мой сценарий PowerShell.
$files = Get-ChildItem "L:\Notes" -Filter *.xml -Recurse | % { $_.FullName }
#add tag confirmation message
$msg = 'Do you want to add to XML file? [Y/N]'
foreach ($file in $files) {
write-host "searching " -NoNewline
write-host ($file)
write-host "`n`r"
[xml]$xml = Get-Content $file
$NodeCheck = $xml.note.from
if ($NodeCheck) {
write-host "from tag was found at"
write-host ($file)
write-host ($NodeCheck.Value)
write-host "`n`r"
[void][System.Console]::ReadKey($true)
} else {
do {
$response = Read-Host -Prompt $msg
if ($response -eq 'y') {
#test method
$xml.note.from
} elseif($response -eq 'n') {
write-host "Nothing changed"
write-host "`n`r"
} else{
write-host "invalid response"
write-host "`n`r"
}
} until ($response -eq 'n'-or $response -eq 'y')
$xml.Save($file)
}
}
, поэтому в качестве примера он будет читать примечание. xml как
<note>
<to>Tove</to>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<color/>
</note>
и, надеюсь, измените его на
<note>
<to>Tove</to>
<from></from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<color/>
</note>
Однако, помимо кода, не добавляющего отсутствующий тег, он добавляет закрывающие теги вместо сохранения самозакрывающегося тега, поэтому XML выглядит так:
<note>
<to>Tove</to>
<from></from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<color></color>
</note>
Как я могу запретить PowerShell изменять самозакрывающийся тег?