Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Этот класс представляет xml-конструкцию пространств имен.
Каждый XName содержит объект XNamespace. Даже если элемент не находится в пространстве имен, XName этого элемента по-прежнему содержит пространство имен, XNamespace.None. Свойство XName.Namespace гарантированно не будет являться null
.
Создание объекта XNamespace
Наиболее распространенным способом создания объекта XNamespace является простое присвоение строки. Затем можно объединить пространство имен с локальным именем с помощью переопределения оператора добавления. В следующем примере показана идиома:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)
Однако в Visual Basic обычно объявляется глобальное пространство имен по умолчанию, как показано ниже.
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>Content</Root>
Console.WriteLine(root)
End Sub
End Module
В примере получается следующий вывод.
<Root xmlns="http://www.adventure-works.com">Content</Root>
Присвоение строки объекту XNamespace с использованием неявного преобразования из String.
Дополнительные сведения и примеры см. в статье о создании документа с пространствами имен в C# (LINQ to XML ).
Дополнительные сведения об использовании пространств имен в Visual Basic см. в статье "Работа с пространствами имен XML ".
Управление префиксами пространства имен
При создании атрибута, объявляющего пространство имен, префикс, указанный в атрибуте, будет сохранен в сериализованном XML. Чтобы создать атрибут, объявляющий пространство имен с префиксом, вам нужно создать атрибут, пространство имен которого соответствует Xmlns, а именем атрибута является префикс пространства имен. Значение атрибута — URI пространства имен. В следующем примере показана идиома:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
"Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
"Content")
Console.WriteLine(root)
В Visual Basic вместо создания узла пространства имен для управления префиксами пространства имен обычно используется объявление глобального пространства имен:
Imports <xmlns:aw='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<aw:Root>Content</aw:Root>
Console.WriteLine(root)
End Sub
End Module
В примере получается следующий вывод.
<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>
Дополнительные сведения см. в разделе "Управление префиксами пространства имен".
Создайте пространство имен по умолчанию
При создании атрибута, который будет пространством имен, если имя атрибута имеет специальное значение xmlns, то при сериализации xml-дерева пространство имен будет объявлено как пространство имен по умолчанию. Специальный атрибут с именем "xmlns" сам не находится в любом пространстве имен. Значение атрибута — URI пространства имен.
В следующем примере создается XML-дерево, содержащее атрибут, объявленный в таком виде, что пространство имен становится пространством имен по умолчанию.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute("xmlns", "http://www.adventure-works.com"), _
New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)
В Visual Basic вместо создания узла пространства имен для создания пространства имен по умолчанию обычно используется глобальное объявление пространства имен по умолчанию:
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>
<Child>content</Child>
</Root>
Console.WriteLine(root)
End Sub
End Module
В примере получается следующий вывод.
<Root xmlns="http://www.adventure-works.com">
<Child>content</Child>
</Root>
Атомизация XNamespace
XNamespace объекты гарантированно будут атомизированы; То есть, если два XNamespace объекта имеют одинаковый универсальный код ресурса (URI), они будут совместно использовать один и тот же экземпляр. Операторы равенства и сравнения специально предоставляются для этой цели.
Использование развернутых имен
Другой способ указать пространство имен и локальное имя — использовать развернутое имя в форме {namespace}name
:
XElement e = new XElement("{http://www.adventure-works.com}Root",
new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)
В примере получается следующий вывод.
<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />
Этот подход влияет на производительность. Каждый раз при передаче строки, содержащей развернутое имя в LINQ to XML, он должен проанализировать имя, найти атомизованное пространство имен и найти атомизованное имя. Этот процесс занимает время ЦП. Если производительность важна, может потребоваться использовать другой подход.
В Visual Basic рекомендуется использовать XML-литералы, которые не включают использование развернутых имен.