如何在 C# 中解析 XML 文件中的递归 header
How to parse recursive header in XML file in C #
我有以下 XML 代码文件,我正在尝试解析,我有递归 headers 即包和项目,我试图在 C# 中解析,但我收到错误消息说它没有包含 GetEnumerator 的 public 定义。我尝试了 Whosebug 上建议的多种方法(添加 IEnumerable ,多个 List)但没有成功。 XML 架构有 class:SynexB2B,SynnexB2BshipNotice3D,SynnexB2BShipNotice3dPackage(包裹标签在此),SynnexB2bShipNotice3DpackageItem(物品标签在此之下)
感谢帮助。
<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; }
}
}
我有以下 XML 代码文件,我正在尝试解析,我有递归 headers 即包和项目,我试图在 C# 中解析,但我收到错误消息说它没有包含 GetEnumerator 的 public 定义。我尝试了 Whosebug 上建议的多种方法(添加 IEnumerable ,多个 List)但没有成功。 XML 架构有 class:SynexB2B,SynnexB2BshipNotice3D,SynnexB2BShipNotice3dPackage(包裹标签在此),SynnexB2bShipNotice3DpackageItem(物品标签在此之下) 感谢帮助。
<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; }
}
}