Создание документа с пространствами имен в C# (LINQ to XML)
Статья
В этой статье показано, как создавать документы в C# с пространствами имен.
Пример: Объявление и инициализация пространства имен по умолчанию
Чтобы создать элемент или атрибут, который находится в пространстве имен, сначала объявите и инициализируете объект XNamespace. Затем вы используете перегрузку оператора сложения для объединения пространства имен с локальным именем, выраженным в виде строки.
В следующем примере создается документ с одним пространством имен. По умолчанию LINQ to XML сериализует этот документ с использованием заданного пространства имен.
// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);
В этом примере создаются следующие выходные данные:
Пример. Создание документа с пространством имен и атрибутом
В следующем примере создается документ с одним пространством имен. Он также создает атрибут, который объявляет пространство имен с использованием префикса пространства имен. Чтобы создать атрибут, объявляющий пространство имен с префиксом, создайте атрибут, в котором имя атрибута является префиксом пространства имен, и это имя находится в пространстве имен Xmlns. Значение этого атрибута — URI пространства имен.
// Create an XML tree in a namespace, with a specified prefix
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);
В этом примере создаются следующие выходные данные:
Пример. Создание документа с двумя пространствами имен, одним из них с префиксом
В следующем примере показано создание документа, содержащего два пространства имен. Одно из них — это пространство имен по умолчанию, а другое — пространство имен с префиксом.
Включив атрибуты пространства имен в корневой элемент, пространства имен сериализуются таким образом, чтобы http://www.adventure-works.com является пространством имен по умолчанию, а www.fourthcoffee.com сериализуется с префиксом fc. Чтобы создать атрибут, объявляющий пространство имен по умолчанию, создайте атрибут с именем xmlnsбез пространства имен. Значение атрибута — URI пространства имен по умолчанию.
Если объявление пространства имен по умолчанию находится в области, оно применяется к дочерним объектам XElement путем префикса их локальных имен с соответствующим объектом XNamespace. С другой стороны, объявления пространства имен по умолчанию не применяются непосредственно к именам атрибутов. Таким образом, объекты XAttribute в пространстве имен по умолчанию определяются не добавлением префикса к их локальному имени, а соответствующим объектом из XNamespace.
// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
new XElement(fc + "Child",
new XElement(aw + "DifferentChild", "other content")
),
new XElement(aw + "Child2", "c2 content",
new XAttribute("DefaultNs", "default namespace"),
new XAttribute(fc + "PrefixedNs", "prefixed namespace")
),
new XElement(fc + "Child3", "c3 content",
new XAttribute("DefaultNs", "default namespace"),
new XAttribute(fc + "PrefixedNs", "prefixed namespace")
)
);
Console.WriteLine(root);
В этом примере создаются следующие выходные данные:
Пример. Создание пространства имен с помощью расширенных имен
Другой способ добиться того же результата заключается в том, чтобы использовать развернутые имена вместо объявления и создания объекта XNamespace.
Этот подход влияет на производительность. Каждый раз при передаче строки, содержащей развернутое имя в LINQ to XML, LINQ to XML должен проанализировать имя, найти атомизованное пространство имен и найти атомизованное имя. Этот процесс занимает время ЦП. Если производительность важна, может потребоваться явно объявить и использовать объект XNamespace.
// Create an XML tree in a namespace, with a specified prefix
XElement root = new XElement("{http://www.adventure-works.com}Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
new XElement("{http://www.adventure-works.com}Child", "child content")
);
Console.WriteLine(root);
В этом примере создаются следующие выходные данные:
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.