簡體   English   中英

如何使用未知迭代解析 XML 中的迭代元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM