XName Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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) | |
| 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 |
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 é) |
| 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) | |
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Preenche a SerializationInfo com os dados necessários para serializar o objeto alvo. |