Compartilhar via


Como controlar prefixos de namespace (LINQ to XML)

Este artigo descreve como controlar prefixos de namespace ao serializar uma árvore XML no C# e no Visual Basic.

Em muitas situações, não é necessário controlar prefixos de namespace. No entanto, determinadas ferramentas de programação XML exigem isso. Por exemplo, você pode manipular uma folha de estilos XSLT ou um documento XAML que contenha as expressões XPath inseridas que se referem a prefixos de namespace específicos. Nesse caso, é importante que o documento seja serializado com esses prefixos específicos. Esse é o motivo mais comum para controlar prefixos de namespace.

Outro motivo é que você deseje que os usuários editem manualmente o documento XML e queira criar prefixos de namespace que sejam convenientes para o usuário digitar. Por exemplo, você pode estar gerando um documento XSD. As convenções de esquemas sugerem que você use xs ou xsd como o prefixo do namespace do esquema.

Para controlar prefixos de namespace, você insere os atributos que declaram os namespaces. Se você declarar os namespaces com prefixos específicos, o LINQ to XML tentará respeitar os prefixos de namespace ao serializar.

Para criar um atributo que declare um namespace com um prefixo, você cria um atributo onde o namespace do nome do atributo é Xmlns, e o nome do atributo é o prefixo do namespace. O valor do atributo é o URI do namespace.

Exemplo: criar dois namespaces que tenham prefixos

Esse exemplo declara dois namespaces. Ele especifica o prefixo aw para o namespace http://www.adventure-works.com e o prefixo fc para o namespace www.fourthcoffee.com.

XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
Imports <xmlns:aw="http://www.adventure-works.com">
Imports <xmlns:fc="www.fourthcoffee.com">

Module Module1

    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <fc:Child>
                    <aw:DifferentChild>other content</aw:DifferentChild>
                </fc:Child>
                <aw:Child2>c2 content</aw:Child2>
                <fc:Child3>c3 content</fc:Child3>
            </aw:Root>
        Console.WriteLine(root)
    End Sub

This example produces the following output:

```xml
<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

Confira também