Partilhar via


Gerenciando namespaces em um documento XML

Os namespaces XML associam nomes de elementos e atributos em um documento XML a URIs personalizados e predefinidos. Para criar essas associações, defina prefixos para URIs de namespace e use esses prefixos para qualificar nomes de elementos e atributos em dados XML. Os namespaces evitam colisões de nomes de elementos e atributos e permitem que elementos e atributos do mesmo nome sejam manipulados e validados de forma diferente.

Declarando namespaces

Para declarar um namespace em um elemento, use o atributo xmlns: :

xmlns:<name>=<"uri">

onde <name> é o prefixo do namespace e <"uri"> é o URI que identifica o namespace. Depois de declarar o prefixo, você pode usá-lo para qualificar elementos e atributos em um documento XML e associá-los ao URI do namespace. Como o prefixo do namespace é usado em todo um documento, ele deve ser curto em comprimento.

Este exemplo define dois BOOK elementos. O primeiro elemento é qualificado pelo prefixo, mybooke o segundo elemento é qualificado pelo prefixo, bb. Cada prefixo está associado a um URI de namespace diferente:

<mybook:BOOK xmlns:mybook="http://www.contoso.com/books.dtd">  
    <bb:BOOK xmlns:bb="urn:blueyonderairlines" />
</mybook:BOOK>

Para indicar que um elemento faz parte de um namespace específico, adicione o prefixo do namespace a ele. Por exemplo, se um Author elemento pertence ao namespace, ele é declarado mybook como <mybook:Author>.

Âmbito da declaração

Um namespace é efetivo desde seu ponto de declaração até o final do elemento em que foi declarado. Neste exemplo, o namespace definido no BOOK elemento não se aplica a elementos fora do BOOK elemento , como o Publisher elemento :

<Author>Joe Smith</Author>  
<BOOK xmlns:book="http://www.contoso.com">  
    <title>My Wonderful Day</title>  
      <price>$3.95</price>  
</BOOK>  
<Publisher>  
    <Name>MSPress</Name>  
</Publisher>  

Um namespace deve ser declarado antes de poder ser usado, mas não precisa aparecer na parte superior do documento XML.

Ao usar vários namespaces em um documento XML, você pode definir um namespace como o namespace padrão para criar um documento com aparência mais limpa. O namespace padrão é declarado no elemento raiz e se aplica a todos os elementos não qualificados no documento. Os namespaces padrão se aplicam apenas a elementos, não a atributos.

Para usar o namespace padrão, omita o prefixo e os dois pontos da declaração no elemento :

<BOOK xmlns="http://www.contoso.com/books.dtd">  
...
</BOOK>

Gerenciando namespaces

A XmlNamespaceManager classe armazena uma coleção de URIs de namespace e seus prefixos e permite pesquisar, adicionar e remover namespaces dessa coleção. Em determinados contextos, essa classe é necessária para um melhor desempenho de processamento XML. Por exemplo, a XsltContext classe usa XmlNamespaceManager para suporte XPath.

O gerenciador de namespace não executa nenhuma validação nos namespaces, mas assume que os prefixos e namespaces já foram verificados e estão em conformidade com a especificação W3C Namespaces .

Nota

LINQ TO XML em C# e Visual Basic não são usados XmlNamespaceManager para gerenciar namespaces. Consulte Trabalhando com namespaces XML (C#) e Trabalhando com namespaces XML (Visual Basic) na documentação do LINQ para obter informações sobre como gerenciar namespaces ao usar LINQ to XML.

Aqui estão algumas das tarefas de gerenciamento e pesquisa que você pode executar com a XmlNamespaceManager classe. Para obter mais informações e exemplos, siga os links para a página de referência para cada método ou propriedade.

Para Utilizar
Adicionar um namespace AddNamespace método
Remover um namespace RemoveNamespace método
Localizar o URI do namespace padrão DefaultNamespace propriedade
Localizar o URI de um prefixo de namespace LookupNamespace método
Localizar o prefixo de um URI de namespace LookupPrefix método
Obter uma lista de namespaces no nó atual GetNamespacesInScope método
Escopo de um namespace PushScope e PopScope métodos
Verificar se um prefixo está definido no escopo atual HasNamespace método
Obter a tabela de nomes usada para pesquisar prefixos e URIs NameTable propriedade

Consulte também