Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Класс XmlTextWriter реализует XmlWriter класс.
Замечание
Рекомендуется создавать XmlWriter экземпляры с помощью XmlWriter.Create метода и XmlWriterSettings класса, чтобы воспользоваться преимуществами новых функций.
XmlTextWriter поддерживает стек пространства имен, соответствующий всем пространствам имен, определенным в текущем стеке элементов. С помощью XmlTextWriter можно вручную объявить пространства имен.
w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
Приведенный выше код C# создает следующие выходные данные.
XmlTextWriter содействует перемещению объявления пространства имен к корневому элементу, чтобы избежать его дублирования в двух дочерних элементах. Дочерние элементы извлекают префикс из определения пространства имен.
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
XmlTextWriter также позволяет переопределить текущее объявление пространства имен. В следующем примере URI пространства имен "123" переопределяется параметром abc для создания XML-элемента <x:node xmlns:x="abc"/>.
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");
Используя методы записи, которые принимают префикс в качестве аргумента, можно также указать, какой префикс следует использовать. В следующем примере два разных префикса сопоставляются с одинаковым универсальным кодом ресурса (URI) пространства имен для создания XML-текста <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Если существует несколько объявлений пространства имен, сопоставляемых различными префиксами к одному и тому же URI пространства имен, XmlTextWriter проходит стек объявлений пространства имен в обратном порядке и выбирает наиболее близкое.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
В приведенном выше примере C#, так как в вызове WriteAttributeString не указан префикс, обработчик записи использует последний префикс, добавленный в стек пространства имен. В результате создается следующий XML-код:
<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>
Если возникают конфликты пространства имен, их разрешается путем XmlTextWriter создания альтернативных префиксов. Например, если атрибут и элемент имеют один и тот же префикс, но разные пространства имен, XmlWriter создается альтернативный префикс для атрибута. Созданные префиксы именуются n{i}, где i — это число, начинающееся с 1. Для каждого элемента число сбрасывается до 1.
Атрибуты, связанные с URI пространства имен, должны иметь префикс (пространства имен по умолчанию не применяются к атрибутам). Это соответствует разделу 5.2 пространства имен W3C в рекомендации XML. Если атрибут ссылается на универсальный код ресурса (URI) пространства имен, но не указывает префикс, записывающий модуль создаёт префикс для атрибута.
При написании пустого элемента добавляется дополнительное пространство между именем тега и закрывающим тегом, например <item />. Это обеспечивает совместимость со старыми браузерами.
Когда String используется как параметр метода, null и String.Empty эквивалентны.
String.Empty следует правилам W3C.
Чтобы записать строго типизированные данные, используйте XmlConvert класс для преобразования типов данных в строку. Например, следующий код C# преобразует данные из DoubleString и записывает элемент <price>19.95</price>.
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
XmlTextWriter Не проверяет наличие следующих элементов:
- Недопустимые символы в именах атрибутов и элементов.
- Символы Юникода, которые не соответствуют заданной кодировке. Если символы Юникода не соответствуют заданной кодировке, тег
XmlTextWriterне преобразовывает символы Юникода в символьные сущности. - Повторяющиеся атрибуты.
- Символы в общедоступном идентификаторе DOCTYPE или системном идентификаторе.
Вопросы безопасности
Следующие элементы следует учитывать при работе с классом XmlTextWriter .
Исключения, возникающие в результате работы XmlTextWriter, могут раскрывать сведения о пути, которые нежелательны для приложения. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.
При передаче XmlTextWriter другому приложению базовый поток становится доступен этому приложению. Если необходимо передать XmlTextWriter в полунадежное приложение, вместо этого следует использовать объект XmlWriter, созданный методом Create.
Данные, передаваемые в методы XmlTextWriter или WriteDocType, не проверяются WriteRaw. Не следует передавать произвольные данные этим методам.
Если параметры по умолчанию изменены, нет гарантии того, что созданные выходные данные являются хорошо сформированными XML-данными.
Не принимать вспомогательные компоненты, такие как Encoding объект, из ненадежного источника.