XName Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет имя XML-элемента или атрибута.
public ref class XName sealed : IEquatable<System::Xml::Linq::XName ^>
public ref class XName sealed : IEquatable<System::Xml::Linq::XName ^>, System::Runtime::Serialization::ISerializable
public sealed class XName : IEquatable<System.Xml.Linq.XName>
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
[System.Serializable]
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.Serialization.KnownType(typeof(System.Xml.Linq.NameSerializer))]
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
type XName = class
interface IEquatable<XName>
type XName = class
interface IEquatable<XName>
interface ISerializable
[<System.Serializable>]
type XName = class
interface IEquatable<XName>
interface ISerializable
[<System.Serializable>]
[<System.Runtime.Serialization.KnownType(typeof(System.Xml.Linq.NameSerializer))>]
type XName = class
interface IEquatable<XName>
interface ISerializable
Public NotInheritable Class XName
Implements IEquatable(Of XName)
Public NotInheritable Class XName
Implements IEquatable(Of XName), ISerializable
- Наследование
-
XName
- Атрибуты
- Реализации
Комментарии
Xml-имена включают пространство имен и локальное имя. Полностью квалифицированное имя — это сочетание пространства имен и локального имени.
Создание объекта XName
XName не содержит открытых конструкторов. Вместо этого этот класс предоставляет неявное преобразование из String, которое позволяет создать XName объект. Чаще всего это преобразование используется при создании элемента или атрибута: первый аргумент XElement конструктора — это XName. Передав строку, вы используете неявное преобразование. Следующий код создает элемент с именем, которое не находится в пространстве имен:
XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);
В Visual Basic лучше использовать XML-литералы:
Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)
В примере получается следующий вывод.
<ElementName>content</ElementName>
Присвоение строки объекту XName с использованием неявного преобразования из String.
Пример Visual Basic создает XElement с использованием XML literals. Несмотря на использование XML-литералов, создается объект XName для XElement.
Кроме того, можно вызвать Get метод для XName объекта. Однако рекомендуется использовать неявное преобразование из строки.
Создание XName в пространстве имен
Как и в XML, XName может находиться в пространстве имен или не может находиться в пространстве имен.
Для C# рекомендуемый подход к созданию XName в пространстве имен — объявить XNamespace объект, а затем использовать переопределение оператора добавления.
Рекомендуемый метод для Visual Basic — использование XML-литералов и объявлений глобального пространства имен для создания XML, принадлежащего пространству имен.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)
End Sub
End Module
В примере получается следующий вывод.
<ElementName xmlns="http://www.adventure-works.com">content</ElementName>
Создание XName без пространства имен
Свойство NamespaceXName объекта гарантированно не имеет значения NULL. Если XName не принадлежит пространству имен, то свойству Namespace будет присвоено значение None. В следующем коде показано следующее:
XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
Console.WriteLine("The element is in no namespace.");
else
Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
Console.WriteLine("The element is in no namespace.")
Else
Console.WriteLine("The element is in a namespace.")
End If
В примере получается следующий вывод.
The element is in no namespace.
Использование развернутых имен
Вы также можете создать XName из развернутого XML-имени в форме {namespace}localname:
XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)
В примере получается следующий вывод.
<ElementName xmlns="http://www.adventure-works.com">content</ElementName>
Помните, что создание с помощью расширенного имени менее эффективно, чем создание объекта XNameXNamespace с переопределённым оператором сложения. Это также менее эффективно, чем импорт глобального пространства имен и использование XML-литералов в Visual Basic.
Если вы создаете XName с расширенным именем, LINQ to XML необходимо найти атомизованный экземпляр пространства имен. Эта работа должна повторяться для каждого использования развернутого имени. Это дополнительное время, вероятно, будет незначительным при написании запросов LINQ; однако при создании большого XML-дерева может оказаться значительным.
Объекты XName атомизированы
XName объекты гарантированно будут атомизированы; То есть, если два XName объекта имеют точно то же пространство имен и точно то же локальное имя, они будут совместно использовать один и тот же экземпляр. Операторы равенства и сравнения также предоставляются явным образом для выполнения этой задачи.
Помимо прочего, эта функция позволяет ускорить выполнение запросов. При фильтрации по имени элементов или атрибутов сравнения, выраженные в предикатах, используют сравнение идентичности, а не сравнение значений. Гораздо быстрее определить, что две ссылки на самом деле ссылаются на один и тот же объект, чем для сравнения двух строк.
Свойства
| Имя | Описание |
|---|---|
| LocalName |
Возвращает локальную (некавалифицированную) часть имени. |
| Namespace |
Возвращает часть пространства имен полного имени. |
| NamespaceName |
Возвращает универсальный код ресурса (URI) XNamespace для этого XName. |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) | |
| Get(String, String) |
XName Возвращает объект из локального имени и пространства имен. |
| Get(String) |
XName Возвращает объект из развернутого имени. |
| GetHashCode() |
Получает хэш-код для этого XName. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает развернутое XML-имя в формате |
Операторы
| Имя | Описание |
|---|---|
| Equality(XName, XName) |
Возвращает значение, указывающее, равны ли два экземпляра XName . |
| Implicit(String to XName) |
Преобразует строку, отформатированную как развернутое XML-имя (т. |
| Inequality(XName, XName) |
Возвращает значение, указывающее, равны ли два экземпляра XName . |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IEquatable<XName>.Equals(XName) | |
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Заполняет SerializationInfo данные, необходимые для сериализации целевого объекта. |