Именно это я и хотел бы предотвратить.
В самом деле? Вообще не важно, применяется ли это экранирование; информационный набор XML для обоих одинаков.
Я, честно говоря, немного удивлен, что документ загружается вообще.
>
- это совершенно допустимый символ, включаемый в значение атрибута. Единственное место, в котором >
может потребоваться , чтобы быть &
-экранированным в XML, - это последовательность ]]>
в текстовом содержимом из-за неясного и глупого правила в спецификации.
Чтобы не думать о проблеме, многие сериализаторы XML обычно экранируют >
в любом месте текстового содержимого или значений атрибутов.
Спецификация Canonical XML определяет один конкретный способ сериализации XML-документа, чтобы выходные данные можно было сравнивать как простую строку; например, в нем указано, как именно должны быть упорядочены атрибуты. Канонический XML поддерживает >
-экранирование в текстовом содержимом, но отрицает его в значениях атрибутов. Таким образом, если вы использовали сериализатор Canonical XML для вывода документа, вы получите ожидаемый результат для этого конкретного значения. (Я не могу гарантировать, что это выглядело бы так, как вы хотите для других примеров.)
Вы можете получить канонизатор в .NET, используя XmlDsigC14NTransform (или, возможно, XmlDsigC14NWithCommentsTransform), что-то вроде:
XmlDsigC14NTransform transform= new XmlDsigC14NTransform(false);
transform.LoadInput(doc);
Stream stream= (Stream) t.GetOutput(typeof(Stream));
// write stream to file