XNamespace Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет пространство имен XML. Этот класс не наследуется.
public ref class XNamespace sealed
public sealed class XNamespace
type XNamespace = class
Public NotInheritable Class XNamespace
- Наследование
-
XNamespace
Комментарии
Этот класс представляет 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-литералы, которые не включают использование развернутых имен.
Свойства
| Имя | Описание |
|---|---|
| NamespaceName |
Возвращает универсальный идентификатор ресурса (URI) этого пространства имен. |
| None |
Возвращает объект, соответствующий XNamespace не пространству имен. |
| Xml |
Возвращает объект, соответствующий XNamespace XML-коду ресурса ( |
| Xmlns |
Возвращает объект, соответствующий XNamespace URI XMLNS ( |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный параметр XNamespace текущему XNamespace. |
| Get(String) |
XNamespace Возвращает значение для указанного универсального идентификатора ресурса (URI). |
| GetHashCode() |
Получает хэш-код для этого XNamespace. |
| GetName(String) |
Возвращает объект, XName созданный из этого XNamespace и указанного локального имени. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает универсальный код ресурса (URI) этого XNamespace. |
Операторы
| Имя | Описание |
|---|---|
| Addition(XNamespace, String) |
Объединяет XNamespace объект с локальным именем для создания XNameобъекта. |
| Equality(XNamespace, XNamespace) |
Возвращает значение, указывающее, равны ли два экземпляра XNamespace . |
| Implicit(String to XNamespace) |
Преобразует строку, содержащую универсальный идентификатор ресурса (URI) в объект XNamespace. |
| Inequality(XNamespace, XNamespace) |
Возвращает значение, указывающее, равны ли два экземпляра XNamespace . |