Редактирование файла XML с помощью Powershell убивает кодировку

С Powershell 3.0 я хочу отредактировать XML-файл, созданный программой:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<Node1>
    <Child attr="&#x0A;" />
</Node1>

Используемый скрипт:

$xml = [xml](Get-Content "C:\Users\XXX\Desktop\Test.xml" -Force)

# Save it directly :
$xml.Save("C:\Users\XXX\Desktop\Test2.xml")

# Force encoding :
$encoding = [Text.Encoding]::GetEncoding('ISO-8859-1') #
$writer = New-Object IO.StreamWriter("C:\Users\XXX\Desktop\Test3.xml",$false,$encoding)

$xml.Save($writer)
$writer.Close()

Test2.xml и Test3.xml (найдены здесь) становится:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Node1>
  <Child attr="&#xA;" />
</Node1>

&#x0A; заменяется на &#xA;

Почему ? Как я могу этого избежать? (Программа не может прочитать отредактированный файл).


person Alsatian    schedule 24.03.2017    source источник
comment
Изменение способа вывода не поможет, 0 усекается при создании объекта [xml].   -  person Mathias R. Jessen    schedule 24.03.2017
comment
Почему? Потому что это допустимый XML, а &#0xA; — нет. См. Спецификацию W3C Расширяемый язык разметки (XML) 1.0 (пятое издание), раздел в ссылках на символы — ссылка на символ может начинаться только с &# или &#x. Значит, не &#0x. Далее следует XML-схема, часть 2: типы данных, второе издание, примечание о пробелах говоря Примечание: здесь используется #xA [обозначает перевод строки]. Эту нотацию следует отличать от , которая является ссылкой символа XML на ту же кодовую точку UCS..   -  person TessellatingHeckler    schedule 25.03.2017
comment
Таким образом, программа не может прочитать действительный XML, сообщить в службу поддержки, сообщить об ошибке и т. д. Или найти другую XML-библиотеку, которая сломана удобным для совместимости способом, или написать XML-потоковую запись, которая выбирает этот случай и изменяет его, или перезагрузите файл как текст после сохранения и выполните поиск/замену текста, потому что у вас нет другого выбора...   -  person TessellatingHeckler    schedule 25.03.2017
comment
Хорошо, спасибо за объяснение.   -  person Alsatian    schedule 25.03.2017