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, mybook
e 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 |