XName Classe

Definição

Representa um 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

Comentários

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 nenhum construtor público. Em vez disso, essa classe fornece uma conversão implícita de String que permite que você crie uma XName. O lugar mais comum 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á no namespace:

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

No Visual Basic, é mais apropriado utilizar 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. Mesmo que 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 é utilizar a conversão implícita de cadeia de caracteres.

Criar um XName em um namespace

Assim como no 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 objeto XNamespace e então usar a sobrecarga do operador de adição.

Para o Visual Basic, a abordagem recomendada é usar literais XML e declarações de namespace globais para criar XML que esteja 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 tem a garantia de não ser nula. Se a XName propriedade não 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 na forma {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 XName através de um nome expandido é menos eficiente do que criar um objeto XNamespace e usar 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, LINQ to XML precisa encontrar a instância atomizada de um namespace. Esse 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.

Objetos XName são atomizados

XName os objetos têm a garantia de serem 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 essa finalidade.

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

Propriedades

Nome Description
LocalName

Obtém a parte local (não qualificada) do nome.

Namespace

Obtém a parte do namespace do nome totalmente qualificado.

NamespaceName

Retorna o URI do XNamespace para isso XName.

Métodos

Nome Description
Equals(Object)

Determina se o especificado XName é igual a esse XName.

Get(String, String)

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

Get(String)

Obtém um XName objeto de um nome expandido.

GetHashCode()

Obtém um código hash para isso XName.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

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

Operadores

Nome Description
Equality(XName, XName)

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

Implicit(String to XName)

Converte uma cadeia de caracteres formatada como um nome XML expandido (ou seja,{namespace}localname ) em um XName objeto.

Inequality(XName, XName)

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

Implantações explícitas de interface

Nome Description
IEquatable<XName>.Equals(XName)

Indica se a corrente XName é igual à especificada XName.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Popula um SerializationInfo com os dados necessários para serializar o objeto de destino.

Aplica-se a

Confira também