Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett vanligt mönster som du använder i koden är att anropa en axelmetod och sedan anropa en av tilläggsmetodaxlarna.
Det finns två axlar med namnet på Elements som returnerar en samling element: XContainer.Elements metoden och Extensions.Elements metoden. Du kan kombinera dessa två axlar för att hitta alla element i ett angivet namn på ett visst djup i trädet.
Exempel: Hämta alla namnelement
Det här exemplet använder XContainer.Elements och Extensions.Elements för att hämta alla Name element i alla Address element i alla PurchaseOrder element.
I det här exemplet används XML-dokumentexempel-XML-fil : Flera inköpsorder.
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
Det här exemplet genererar följande utdata:
<Name>Ellen Adams</Name>
<Name>Tai Yee</Name>
<Name>Cristian Osorio</Name>
<Name>Cristian Osorio</Name>
<Name>Jessica Arnold</Name>
<Name>Jessica Arnold</Name>
Detta fungerar eftersom en av implementeringarna av Elements axeln är som en tilläggsmetod för IEnumerable<T> XContainer. XElement härleds från XContainer, så att du kan anropa Extensions.Elements metoden på resultatet av ett anrop till XContainer.Elements metoden.
Exempel: Hämta alla element på ett visst djup
Ibland vill du hämta alla element på ett visst elementdjup när det kanske inte finns mellanliggande överordnade element. I följande dokument kanske du till exempel vill hämta alla ConfigParameter element som är underordnade elementet Customer , men inte elementets ConfigParameter Root underordnade element.
<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>
För att göra detta kan du använda Extensions.Elements axeln på följande sätt:
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
Det här exemplet genererar följande utdata:
<ConfigParameter>FirstConfigParameter</ConfigParameter>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
Exempel: Hämta element för XML som finns i ett namnområde
I följande exempel visas samma teknik för XML som finns i ett namnområde. Mer information finns i Översikt över namnområden.
I det här exemplet används XML-dokumentexempelfil : Flera inköpsorder i ett namnområde.
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
Det här exemplet genererar följande utdata:
<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>