Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um padrão comum que você usará em seu código é chamar um método de eixo e, em seguida, chamar um dos eixos do método de extensão.
Existem dois eixos com o nome que Elements retornam uma coleção de elementos: o XContainer.Elements método e o Extensions.Elements método. Você pode combinar esses dois eixos para encontrar todos os elementos de um nome especificado em uma determinada profundidade na árvore.
Exemplo: Recuperar todos os elementos de nome
Este exemplo usa XContainer.Elements e Extensions.Elements para recuperar todos os Name elementos em todos os Address elementos em todos os PurchaseOrder elementos.
Este exemplo usa o documento XML Sample XML file: Multiple purchase orders.
XElement purchaseOrders = XElement.Load("PurchaseOrders.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements("PurchaseOrder")
.Elements("Address")
.Elements("Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrders.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<PurchaseOrder>.<Address>.<Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
Este exemplo produz a seguinte saída:
<Name>Ellen Adams</Name>
<Name>Tai Yee</Name>
<Name>Cristian Osorio</Name>
<Name>Cristian Osorio</Name>
<Name>Jessica Arnold</Name>
<Name>Jessica Arnold</Name>
Isso funciona porque uma das implementações do eixo é como um método de Elements extensão em IEnumerable<T> XContainer. XElement deriva de XContainer, para que você possa chamar o Extensions.Elements método nos resultados de uma chamada para o XContainer.Elements método.
Exemplo: recuperar todos os elementos em uma profundidade específica
Às vezes, você quer recuperar todos os elementos em uma determinada profundidade de elemento quando pode não haver antepassados intervenientes. Por exemplo, no documento a seguir, talvez você queira recuperar todos os ConfigParameter elementos que são filhos do Customer elemento, mas não o ConfigParameter que é filho do Root elemento.
<Root>
<ConfigParameter>RootConfigParameter</ConfigParameter>
<Customer>
<Name>Frank</Name>
<Config>
<ConfigParameter>FirstConfigParameter</ConfigParameter>
</Config>
</Customer>
<Customer>
<Name>Bob</Name>
<!--This customer doesn't have a Config element-->
</Customer>
<Customer>
<Name>Bill</Name>
<Config>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
</Config>
</Customer>
</Root>
Para fazer isso, você pode usar o Extensions.Elements eixo, da seguinte maneira:
XElement root = XElement.Load("Irregular.xml");
IEnumerable<XElement> configParameters =
root.Elements("Customer").Elements("Config").
Elements("ConfigParameter");
foreach (XElement cp in configParameters)
Console.WriteLine(cp);
Dim root As XElement = XElement.Load("Irregular.xml")
Dim configParameters As IEnumerable(Of XElement) = _
root.<Customer>.<Config>.<ConfigParameter>
For Each cp As XElement In configParameters
Console.WriteLine(cp)
Next
Este exemplo produz a seguinte saída:
<ConfigParameter>FirstConfigParameter</ConfigParameter>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
Exemplo: recuperar elementos para XML que está em um namespace
O exemplo a seguir mostra a mesma técnica para XML que está em um namespace. Para obter mais informações, consulte Visão geral de namespaces.
Este exemplo usa o documento XML Sample XML file: Multiple purchase orders in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement purchaseOrders = XElement.Load("PurchaseOrdersInNamespace.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements(aw + "PurchaseOrder")
.Elements(aw + "Address")
.Elements(aw + "Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Imports <xmlns:aw="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<aw:PurchaseOrder>.<aw:Address>.<aw:Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
End Sub
End Module
Este exemplo produz a seguinte saída:
<aw:Name xmlns:aw="http://www.adventure-works.com">Ellen Adams</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Tai Yee</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>