Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
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.