Como escrever consultas em XML em namespaces (LINQ to XML)How to write queries on XML in namespaces (LINQ to XML)

Para gravar uma consulta em XML que está em um namespace, você deve usar XName objetos que têm o namespace correto.To write a query on XML that's in a namespace, you must use XName objects that have the correct namespace.

Para C#, a abordagem mais comum é inicializar um XNamespace usando uma cadeia de caracteres que contém o URI, em seguida, usar a sobrecarga de operador de adição para combinar o namespace com o nome local.For C#, the most common approach is to initialize an XNamespace using a string that contains the URI, then use the addition operator overload to combine the namespace with the local name.

Por Visual Basic, a abordagem mais comum é definir um namespace global e, em seguida, usar literais XML e propriedades XML que usam o namespace global.For Visual Basic, the most common approach is to define a global namespace, and then use XML literals and XML properties that use the global namespace. Você pode definir um namespace global padrão nesse caso, no qual os elementos nos literais XML estarão no namespace por padrão.You can define a global default namespace, in which case elements in the XML literals will be in the namespace by default. Como alternativa, você pode definir um namespace global com um prefixo e, em seguida, usar o prefixo conforme necessário nos literais XML e nas propriedades XML.Alternatively, you can define a global namespace with a prefix, and then use the prefix as required in the XML literals and in XML properties. Como ocorre com outros formatos de XML, os atributos estão sempre em nenhum namespace por padrão.As with other forms of XML, attributes are always in no namespace by default.

O primeiro exemplo neste artigo mostra como criar uma árvore XML em um namespace padrão.The first example in this article shows how to create an XML tree in a default namespace. O segundo mostra como criar uma árvore XML em um namespace com um prefixo.The second shows how to create an XML tree in a namespace with a prefix.

Exemplo: criar uma árvore em um namespace padrão e recuperar elementosExample: Create a tree in a default namespace and retrieve elements

O exemplo a seguir cria uma árvore XML que está em um namespace padrão e, em seguida, recupera uma coleção de elementos.The following example creates an XML tree that's in a default namespace, and then retrieves a collection of elements.

XNamespace aw = "http://www.adventure-works.com";
XElement root = XElement.Parse(
@"<Root xmlns='http://www.adventure-works.com'>
    <Child>1</Child>
    <Child>2</Child>
    <Child>3</Child>
    <AnotherChild>4</AnotherChild>
    <AnotherChild>5</AnotherChild>
    <AnotherChild>6</AnotherChild>
</Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns="http://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child>1</Child>
                <Child>2</Child>
                <Child>3</Child>
                <AnotherChild>4</AnotherChild>
                <AnotherChild>5</AnotherChild>
                <AnotherChild>6</AnotherChild>
            </Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(el.Value)
        Next
    End Sub
End Module

Esse exemplo gera a saída a seguir:This example produces the following output:

1
2
3

Exemplo: criar uma árvore em um namespace com um prefixo e recuperar elementosExample: Create a tree in a namespace with a prefix and retrieve elements

No C#, você escreve consultas da mesma maneira, independentemente de estar escrevendo consultas em uma árvore XML que usa um namespace com um prefixo ou em uma árvore XML com um namespace padrão.In C#, you write queries in the same way regardless of whether you're writing queries on an XML tree that uses a namespace with a prefix or on an XML tree with a default namespace.

O exemplo a seguir cria uma árvore XML que está em um namespace com um prefixo e, em seguida, recupera uma coleção de elementos.The following example creates an XML tree that's in a namespace with a prefix, and then retrieves a collection of elements.

XNamespace aw = "http://www.adventure-works.com";
XElement root = XElement.Parse(
@"<aw:Root xmlns:aw='http://www.adventure-works.com'>
    <aw:Child>1</aw:Child>
    <aw:Child>2</aw:Child>
    <aw:Child>3</aw:Child>
    <aw:AnotherChild>4</aw:AnotherChild>
    <aw:AnotherChild>5</aw:AnotherChild>
    <aw:AnotherChild>6</aw:AnotherChild>
</aw:Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns:aw="http://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <aw:Child>1</aw:Child>
                <aw:Child>2</aw:Child>
                <aw:Child>3</aw:Child>
                <aw:AnotherChild>4</aw:AnotherChild>
                <aw:AnotherChild>5</aw:AnotherChild>
                <aw:AnotherChild>6</aw:AnotherChild>
            </aw:Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<aw:Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(CInt(el))
        Next
    End Sub
End Module

Esse exemplo gera a saída a seguir:This example produces the following output:

1
2
3

Confira tambémSee also