我嘗試使用Linq to XML 決議 XML失敗。盡管正如您在下面看到的 ItemList[0] 一樣,我可以得到ItemList
list 有許多 XML 元素項ItemList (variable)
,結果只顯示了ItemList [0]
in的一個 XML 元素ItemList (variable)
。我需要列印出ItemList [n]
.
主要代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace WPF_ParsingXML.ViewModels.Helper
{
public class XMLHelper
{
public void ParseXML_Sample1()
{
// Read a file
XElement root = XElement.Load(Environment.CurrentDirectory @"\..\..\Sample.xml");
// Assign the default namespace
XNamespace aw = "http://www.adventure-works.com";
// Get values from elements
IEnumerable<XElement> ItemList =
from el in root.Elements(aw "PurchaseOrder")
select el.Element(aw "Items");
// Print
foreach (XElement el in ItemList)
{
Console.WriteLine("###################################");
Console.WriteLine((string)el.Element(aw "Item").Element(aw "ProductName"));
Console.WriteLine((string)el.Element(aw "Item").Attribute(aw "PartNumber"));
Console.WriteLine("###################################");
}
}
}
}
示例.xml
<?xml version="1.0" encoding="utf-8"?>
<aw:PurchaseOrders xmlns:aw="http://www.adventure-works.com">
<aw:PurchaseOrder aw:PurchaseOrderNumber="99503" aw:OrderDate="1999-10-20">
<aw:Address aw:Type="Shipping">
<aw:Name>Ellen Adams</aw:Name>
<aw:Street>123 Maple Street</aw:Street>
<aw:City>Mill Valley</aw:City>
<aw:State>CA</aw:State>
<aw:Zip>10999</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:Address aw:Type="Billing">
<aw:Name>Tai Yee</aw:Name>
<aw:Street>8 Oak Avenue</aw:Street>
<aw:City>Old Town</aw:City>
<aw:State>PA</aw:State>
<aw:Zip>95819</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:DeliveryNotes>Please leave packages in shed by driveway.</aw:DeliveryNotes>
<aw:Items>
<aw:Item aw:PartNumber="872-AA">
<aw:ProductName>Lawnmower</aw:ProductName>
<aw:Quantity>1</aw:Quantity>
<aw:USPrice>148.95</aw:USPrice>
<aw:Comment>Confirm this is electric</aw:Comment>
</aw:Item>
<aw:Item aw:PartNumber="926-AA">
<aw:ProductName>Baby Monitor</aw:ProductName>
<aw:Quantity>2</aw:Quantity>
<aw:USPrice>39.98</aw:USPrice>
<aw:ShipDate>1999-05-21</aw:ShipDate>
</aw:Item>
</aw:Items>
</aw:PurchaseOrder>
<aw:PurchaseOrder aw:PurchaseOrderNumber="99505" aw:OrderDate="1999-10-22">
<aw:Address aw:Type="Shipping">
<aw:Name>Cristian Osorio</aw:Name>
<aw:Street>456 Main Street</aw:Street>
<aw:City>Buffalo</aw:City>
<aw:State>NY</aw:State>
<aw:Zip>98112</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:Address aw:Type="Billing">
<aw:Name>Cristian Osorio</aw:Name>
<aw:Street>456 Main Street</aw:Street>
<aw:City>Buffalo</aw:City>
<aw:State>NY</aw:State>
<aw:Zip>98112</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:DeliveryNotes>Please notify me before shipping.</aw:DeliveryNotes>
<aw:Items>
<aw:Item aw:PartNumber="456-NM">
<aw:ProductName>Power Supply</aw:ProductName>
<aw:Quantity>1</aw:Quantity>
<aw:USPrice>45.99</aw:USPrice>
</aw:Item>
</aw:Items>
</aw:PurchaseOrder>
<aw:PurchaseOrder aw:PurchaseOrderNumber="99504" aw:OrderDate="1999-10-22">
<aw:Address aw:Type="Shipping">
<aw:Name>Jessica Arnold</aw:Name>
<aw:Street>4055 Madison Ave</aw:Street>
<aw:City>Seattle</aw:City>
<aw:State>WA</aw:State>
<aw:Zip>98112</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:Address aw:Type="Billing">
<aw:Name>Jessica Arnold</aw:Name>
<aw:Street>4055 Madison Ave</aw:Street>
<aw:City>Buffalo</aw:City>
<aw:State>NY</aw:State>
<aw:Zip>98112</aw:Zip>
<aw:Country>USA</aw:Country>
</aw:Address>
<aw:Items>
<aw:Item aw:PartNumber="898-AZ">
<aw:ProductName>Computer Keyboard</aw:ProductName>
<aw:Quantity>1</aw:Quantity>
<aw:USPrice>29.99</aw:USPrice>
</aw:Item>
<aw:Item aw:PartNumber="898-AM">
<aw:ProductName>Wireless Mouse</aw:ProductName>
<aw:Quantity>1</aw:Quantity>
<aw:USPrice>14.99</aw:USPrice>
</aw:Item>
</aw:Items>
</aw:PurchaseOrder>
</aw:PurchaseOrders>
專案串列[0]
<aw:Items xmlns:aw="http://www.adventure-works.com">
<aw:Item aw:PartNumber="872-AA">
<aw:ProductName>Lawnmower</aw:ProductName>
<aw:Quantity>1</aw:Quantity>
<aw:USPrice>148.95</aw:USPrice>
<aw:Comment>Confirm this is electric</aw:Comment>
</aw:Item>
<aw:Item aw:PartNumber="926-AA">
<aw:ProductName>Baby Monitor</aw:ProductName>
<aw:Quantity>2</aw:Quantity>
<aw:USPrice>39.98</aw:USPrice>
<aw:ShipDate>1999-05-21</aw:ShipDate>
</aw:Item>
</aw:Items>
結果
###################################
Lawnmower
872-AA
###################################
###################################
Power Supply
456-NM
###################################
###################################
Computer Keyboard
898-AZ
###################################
預期結果
###################################
Lawnmower
872-AA
###################################
###################################
Baby Monitor
926-AA
###################################
Power Supply
456-NM
###################################
###################################
Computer Keyboard
898-AZ
###################################
###################################
Wireless Mouse
898-AM
###################################
uj5u.com熱心網友回復:
一種更好更簡單的方法。
C#
void Main()
{
const string filename = @"e:\Temp\Sample.xml";
XDocument xdoc = XDocument.Load(filename);
XNamespace aw = "http://www.adventure-works.com";
foreach (XElement el in xdoc.Descendants(aw "Item"))
{
Console.WriteLine("###################################");
Console.WriteLine(el.Element(aw "ProductName").Value);
Console.WriteLine(el.Attribute(aw "PartNumber").Value);
Console.WriteLine("###################################");
}
}
uj5u.com熱心網友回復:
如果您閱讀Element的檔案,它會說:
獲取具有指定 XName 的第一個(按檔案順序)子元素。
請注意它怎么說“第一個孩子”。在您的情況下,您想要檢索所有孩子,因此您需要呼叫Elements。
為此,請在當前回圈中添加一個 for each 回圈。
foreach (XElement el in ItemList)
{
foreach (XElement elem in el.Elements(aw "Item")
{
// Rest of code left as exercise for reader
}
}
對不起,我在手機上輸入的任何錯別字。
Descendants
附帶說明一下,如果您的唯一目標是獲取 Items 節點,請考慮呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436607.html
上一篇:如何只處理一次單例錯誤