如何在C#中解析XML文件中的递归标头

应用程式码

我有以下要尝试解析的XML代码文件,我有递归标头,即Packages和item,我试图在C#中解析,但是却收到错误消息,说它不包含GetEnumerator的公共定义。我尝试了在stackoverflow上建议使用多种方法(添加IEnumerable,多个List),但没有成功。XML模式具有类:SynexB2B,SynnexB2BshipNotice3D,SynnexB2BShipNotice3dPackage(在此下的Package标记),SynnexB2bShipNotice3DpackageItem(在此下的Item标记)谢谢您的帮助。

<Package sequence="1">
  <TrackNumber>498380381729</TrackNumber>
  <PackageWeight>1</PackageWeight>
  <Item sequence="1">
    <SOLineNo>3</SOLineNo>
    <MfgPN>C7130A</MfgPN>
    <SKU>951524</SKU>
    <ShipQuantity>1</ShipQuantity>
    <CustPOLineNo>3</CustPOLineNo>
    <CustSOLineNo />
    <Description>HP 500 sheet feeder for HP LJ 5500</Description>
    <CustPN />
    <UPC>808736190305</UPC>
    <UnitPrice>436.97</UnitPrice>
    <EndUserPOLineNo>0</EndUserPOLineNo>
    <SYNNEXPN />
  </Item>
  <Item sequence="2">
    <SOLineNo>1</SOLineNo>
    <MfgPN>C9657A#ABA</MfgPN>
    <SKU>948776</SKU>
    <ShipQuantity>1</ShipQuantity>
    <CustPOLineNo>1</CustPOLineNo>
    <CustSOLineNo />
    <Description>HP Color LaserJet 5500dn printer</Description>
    <CustPN />
    <UPC>808736121989</UPC>
    <UnitPrice>3350.61</UnitPrice>
    <EndUserPOLineNo>0</EndUserPOLineNo>
    <SYNNEXPN />
  </Item>
</Package>
<Package sequence="2">
  <TrackNumber>498380381729</TrackNumber>
  <PackageWeight>210</PackageWeight>
  <Item sequence="1">
    <SOLineNo>2</SOLineNo>
    <MfgPN>C7850A</MfgPN>
    <SKU>222599</SKU>
    <ShipQuantity>1</ShipQuantity>
    <CustPOLineNo>2</CustPOLineNo>
    <CustSOLineNo />
    <Description>HP 128MB 168 Pin SDRAM for LJ 4550</Description>
    <CustPN />
    <UPC>725184435713</UPC>
    <UnitPrice>587.66</UnitPrice>
    <EndUserPOLineNo>0</EndUserPOLineNo>
    <SYNNEXPN />
  </Item>
  <Item sequence="2">
    <SOLineNo>3</SOLineNo>
    <MfgPN>C7130A</MfgPN>
    <SKU>951524</SKU>
    <ShipQuantity>1</ShipQuantity>
    <CustPOLineNo>3</CustPOLineNo>
    <CustSOLineNo />
    <Description>HP 500 sheet feeder for HP LJ 5500</Description>
    <CustPN />
    <UPC>808736190305</UPC>
    <UnitPrice>436.97</UnitPrice>
    <EndUserPOLineNo>0</EndUserPOLineNo>
    <SYNNEXPN />
  </Item>
</Package>

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using ms = ConsoleApplication2.MultiPackage;


namespace ConsoleApplication2
{
    class Program
    {

        static void Main(string[] args)
        {

            MultiPackage.SynnexB2B synnexasn = MultiPackage.SynnexB2B.Deserialize("XMLFile2.xml");
            List<List<ms.SynnexB2B>> ms = new List<List<MultiPackage.SynnexB2B>>();

            Properties property = new Properties();
            XmlNodeList xmlnode; 
            List<Properties> prop  = new List<Properties>();

            foreach(ms.SynnexB2BShipNotice3DPackage sb in synnexasn)
            {
                foreach (ms.SynnexB2BShipNotice3DPackageItem si in sb)
                {

                }
            }

            Console.WriteLine();
        }
    }

    public class Properties
    {

        public uint   InvoiceNumber { get; set; }
        public string ShipDescription { get; set; }
        public string ShipContact   { get; set; }
        public string BillContact { get; set; }
        public string EndUserPOnumber {get;set;}
        public ulong  Shiptracknum   { get; set; }
        public string package { get; set; }
    }         
}
杰登

我想你需要这样的东西

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<Package> packages = doc.Descendants("Package").Select(x => new Package() {
                Shiptracknum = (ulong)x.Element("TrackNumber"),
                PackageWeight = (string)x.Element("PackageWeight"),
                items = x.Elements("Items").Select(y => new Item() {
                    ShipDescription = (string)y.Element("Description"),
                    EndUserPOnumber = (string)y.Element("EndUserPOLineNo")
                }).ToList()
            }).ToList();
        }
    }
    public class Package
    {        
        public ulong Shiptracknum { get; set; }
        public string PackageWeight { get; set; }
        public List<Item> items { get; set; }
    }
    public class Item
    {
       public string ShipDescription { get; set; }
       public string EndUserPOnumber { get; set; }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章