[英]How to Parse Iterating elements in XML with unknown iteration
我有一個 XML 文件,我需要解析它並從中獲取一些值,我需要知道如何迭代重復項目,XML 中的 lineItem,LineItem 可以是不同的數字,就像它可以帶有 1 個訂單項或4. 所以我需要解析 XML 並獲取任何進來的字段的值。
我有 2 個更改 XML,因為我不能在這里發布真實的 XML,但是是的,我能夠獲得 PurchaseOrderDate,而且我只需要這個 XML 中的 2 個字段,所以不需要 class 與之匹配
例如,我想獲得這兩個項目:
<BuyerPartNumber>PL123</BuyerPartNumber>
<ItemStatus>Backorder</ItemStatus>
對於進入的所有行項目:
<PurchaseOrderAck>
<Header>
<OrderHeader>
<TradingPartnerId>OP</TradingPartnerId>
<OPIEReferenceID>12354</OPIEReferenceID>
<PurchaseOrderNumber>123</PurchaseOrderNumber>
<PurchaseOrderDate>2021-10-08</PurchaseOrderDate>
<InternalOrderNumber>123654</InternalOrderNumber>
</OrderHeader>
<Address>
<AddressTypeCode>ST</AddressTypeCode>
<AddressName>ALBEMARLE</AddressName>
<Address1>122 test Way</Address1>
<Address2>Suite 104</Address2>
<City>SUFFOLK</City>
<State>VA</State>
<PostalCode>12354</PostalCode>
</Address>
</Header>
<LineItems>
<LineItem>
<OrderLine>
<LineSequenceNumber>0001</LineSequenceNumber>
<BuyerPartNumber>PLPww</BuyerPartNumber>
<VendorPartNumber>PL22</VendorPartNumber>
<PartDescription1>Pro-Flex</PartDescription1>
<OrderQty>1.00</OrderQty>
<OrderQtyUOM>EA</OrderQtyUOM>
<UnitPrice>1073.25</UnitPrice>
<ExtendedLineAmount>1073.25</ExtendedLineAmount>
<ItemStatus>Backorder</ItemStatus>
</OrderLine>
</LineItem>
<LineItem>
<OrderLine>
<LineSequenceNumber>0002</LineSequenceNumber>
<BuyerPartNumber>I-99326</BuyerPartNumber>
<VendorPartNumber>I-4319926</VendorPartNumber>
<PartDescription1>ICEROSS</PartDescription1>
<OrderQty>2.00</OrderQty>
<OrderQtyUOM>EA</OrderQtyUOM>
<UnitPrice>292.410000</UnitPrice>
<ExtendedLineAmount>584.82</ExtendedLineAmount>
<ItemStatus>Released</ItemStatus>
</OrderLine>
</LineItem>
<LineItem>
<OrderLine>
<LineSequenceNumber>0003</LineSequenceNumber>
<BuyerPartNumber>I-C880</BuyerPartNumber>
<VendorPartNumber>I-8820</VendorPartNumber>
<PartDescription1>ICEROSS D</PartDescription1>
<OrderQty>2.00</OrderQty>
<OrderQtyUOM>EA</OrderQtyUOM>
<UnitPrice>277.830000</UnitPrice>
<ExtendedLineAmount>555.66</ExtendedLineAmount>
<ItemStatus>Released</ItemStatus>
</OrderLine>
</LineItem>
</LineItems>
這是我的 class 想要的價值:
public class PurchaseOrderModel
{
public string PurchaseOrderDate { get; set; }
public List<int> BuyerPartNumber{ get; set; }
public List<string> ItemStatus{ get; set; }
}
這里有一些 LINQ-to-XML 可以幫助您入門:
XDocument doc = XDocument.Parse(xml);
var col = doc.Root
.Elements("LineItems")
.Elements("LineItem")
.Elements("OrderLine")
.Select(e => new
{
PurchaseOrderDate = doc.Root.Element("Header").Element("OrderHeader").Element("PurchaseOrderDate").Value,
BuyerPartNumber = e.Element("BuyerPartNumber").Value,
ItemStatus = e.Element("ItemStatus").Value
});
foreach (var item in col)
{
Console.WriteLine(item);
}
您可以使用 XmlDocument 的 GetElementsByTagName() 方法,如下例所示:
using System;
using System.Xml;
public class Sample1
{
public static void Main()
{
//Create the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
//Display all the book titles.
XmlNodeList elemList = doc.GetElementsByTagName("title");
for (int i = 0; i < elemList.Count; i++)
{
Console.WriteLine(elemList[i].InnerXml);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.