XName Classe

Definição

Representa o nome de um elemento ou atributo 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
Herança
XName
Atributos
Implementações

Observações

Os nomes XML incluem um namespace e um nome local. Um nome totalmente qualificado é a combinação do namespace e do nome local.

Criar um objeto XName

XName não contém quaisquer construtores públicos. Em vez disso, esta classe fornece uma conversão implícita de String que permite criar um XName. O local mais comum em que você usa essa conversão é ao construir um elemento ou atributo: O primeiro argumento para o XElement construtor é um XName. Ao passar uma cadeia de caracteres, você aproveita a conversão implícita. O código a seguir cria um elemento com um nome que não está em nenhum namespace:

XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);

No contexto da programação utilizada no Visual Basic, é mais apropriado usar literais XML.

Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)

Este exemplo produz a seguinte saída:

<ElementName>content</ElementName>

Atribuir uma cadeia de caracteres a um XName usa a conversão implícita de String.

O exemplo do Visual Basic cria o XElement usando literais XML. Embora literais XML sejam usados, um XName objeto é criado para o XElement.

Além disso, você pode chamar o Get método para um XName objeto. No entanto, a maneira recomendada é usar a conversão implícita a partir de uma cadeia de caracteres.

Criar um XName em um namespace

Assim como o XML, um XName pode estar em um namespace ou pode estar em nenhum namespace.

Para C#, a abordagem recomendada para criar um XName em um namespace é declarar o XNamespace objeto e, em seguida, usar a substituição do operador de adição.

Para Visual Basic, a abordagem recomendada é usar literais XML e declarações de namespace global para criar XML que está em um namespace.

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

Este exemplo produz a seguinte saída:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

Criar um XName sem namespace

A Namespace propriedade de um XName objeto é garantida para não ser nula. Se o XName estiver em nenhum namespace, a Namespace propriedade será definida como None. O código a seguir demonstra isso:

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

Este exemplo produz a seguinte saída:

The element is in no namespace.

Usar nomes expandidos

Você também pode criar um XName a partir de um nome XML expandido no formato {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)

Este exemplo produz a seguinte saída:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

Lembre-se de que criar um objeto XName através de um nome expandido é menos eficiente do que criar um objeto XNamespace e utilizar a sobrecarga do operador de adição. Também é menos eficiente do que importar um namespace global e usar literais XML no Visual Basic.

Se você criar um XName usando um nome expandido, o LINQ to XML deverá localizar a instância atomizada de um namespace. Este trabalho deve ser repetido para cada uso de um nome expandido. É provável que esse tempo adicional seja insignificante ao escrever consultas LINQ; no entanto, pode ser significativo ao criar uma árvore XML grande.

Os objetos XName são atomizados

XName é garantido que os objetos sejam atomizados; ou seja, se dois XName objetos tiverem exatamente o mesmo namespace e exatamente o mesmo nome local, eles compartilharão a mesma instância. Os operadores de igualdade e comparação também são fornecidos explicitamente para este fim.

Entre outros benefícios, este recurso permite uma execução mais rápida de consultas. Ao filtrar o nome de elementos ou atributos, as comparações expressas em predicados usam a comparação de identidade, não a comparação de valores. É muito mais rápido determinar que duas referências realmente se referem ao mesmo objeto do que comparar duas cadeias de caracteres.

Propriedades

Name Descrição
LocalName

Recebe a parte local (não qualificada) do nome.

Namespace

Recebe a parte do namespace do nome totalmente qualificado.

NamespaceName

Devolve o URI do XNamespace para este XName.

Métodos

Name Descrição
Equals(Object)

Determina se o especificado XName é igual a este XName.

Get(String, String)

Obtém um XName objeto a partir de um nome local e de um namespace.

Get(String)

Obtém um XName objeto a partir de um nome expandido.

GetHashCode()

Obtém um código de hash para isto XName.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve o nome XML expandido no formato {namespace}localname.

Operadores

Name Descrição
Equality(XName, XName)

Devolve um valor que indica se duas instâncias de XName são iguais.

Implicit(String to XName)

Converte uma cadeia formatada como um nome XML expandido (isto é){namespace}localname num XName objeto.

Inequality(XName, XName)

Devolve um valor que indica se duas instâncias de XName não são iguais.

Implementações de Interface Explícita

Name Descrição
IEquatable<XName>.Equals(XName)

Indica se a corrente XName é igual à especificada XName.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Preenche a SerializationInfo com os dados necessários para serializar o objeto alvo.

Aplica-se a

Ver também