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.
Essa classe representa a construção XML de namespaces.
Cada XName contém um XNamespace. Mesmo que um elemento não esteja em um namespace, o elemento XName ainda contém um namespace. XNamespace.None A propriedade XName.Namespace é garantida para não ser null.
Criar um objeto XNamespace
A maneira mais comum de criar um XNamespace objeto é simplesmente atribuir uma cadeia de caracteres a ele. Em seguida, você pode combinar o namespace com um nome local usando a substituição do operador de adição. O exemplo a seguir mostra este idioma:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)
No entanto, no Visual Basic, normalmente você declararia um namespace padrão global, da seguinte maneira:
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>Content</Root>
Console.WriteLine(root)
End Sub
End Module
Este exemplo produz a seguinte saída:
<Root xmlns="http://www.adventure-works.com">Content</Root>
Atribuir uma cadeia de caracteres a um XNamespace usa a conversão implícita de String.
Veja como criar um documento com namespaces em C# (LINQ to XML) para obter mais informações e exemplos.
Consulte Work with XML namespaces para obter mais informações sobre como usar namespaces no Visual Basic.
Controlar prefixos de namespace
Se você criar um atributo que declare um namespace, o prefixo especificado no atributo será mantido no XML serializado. Para criar um atributo que declara um namespace com um prefixo, você cria um atributo em que o namespace do nome do atributo está Xmlnse o nome do atributo é o prefixo do namespace. O valor do atributo é o URI do namespace. O exemplo a seguir mostra este idioma:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
"Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
"Content")
Console.WriteLine(root)
No Visual Basic, em vez de criar um nó de namespace para controlar prefixos de namespace, você normalmente usaria uma declaração de namespace global:
Imports <xmlns:aw='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<aw:Root>Content</aw:Root>
Console.WriteLine(root)
End Sub
End Module
Este exemplo produz a seguinte saída:
<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>
Para obter mais informações, consulte Como controlar prefixos de namespace.
Criar um namespace padrão
Ao construir um atributo que será um namespace, se o nome do atributo tiver o valor especial de "xmlns", quando a árvore XML for serializada, o namespace será declarado como o namespace padrão. O atributo especial com o nome de "xmlns" em si não está em nenhum namespace. O valor do atributo é o URI do namespace.
O exemplo a seguir cria uma árvore XML que contém um atributo que é declarado de forma que o namespace se torne o namespace padrão:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute("xmlns", "http://www.adventure-works.com"), _
New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)
No Visual Basic, em vez de criar um nó de namespace para criar um namespace padrão, você normalmente usaria uma declaração de namespace padrão global:
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>
<Child>content</Child>
</Root>
Console.WriteLine(root)
End Sub
End Module
Este exemplo produz a seguinte saída:
<Root xmlns="http://www.adventure-works.com">
<Child>content</Child>
</Root>
Atomização do XNamespace
XNamespace os objetos têm a garantia de serem atomizados; ou seja, se dois XNamespace objetos tiverem exatamente o mesmo URI, eles compartilharão a mesma instância. Os operadores de igualdade e comparação são fornecidos explicitamente para essa finalidade.
Usar nomes expandidos
Outra maneira de especificar um namespace e um nome local é usar um nome expandido no formulário {namespace}name:
XElement e = new XElement("{http://www.adventure-works.com}Root",
new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)
Este exemplo produz a seguinte saída:
<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />
Essa abordagem tem implicações de desempenho. Cada vez que você passa uma cadeia de caracteres que contém um nome expandido para LINQ para XML, ela deve analisar o nome, localizar o namespace atomizado e encontrar o nome atomizado. Esse processo leva tempo de CPU. Se o desempenho for importante, talvez você queira usar uma abordagem diferente.
Com o Visual Basic, a abordagem recomendada é usar literais XML, o que não envolve o uso de nomes expandidos.