2016-06-16 18 views
0

私は次のXMLコードファイルを解析しようとしています。再帰的なヘッダー、つまりパッケージとアイテムを持っていますが、C#で解析しようとしていますが、 GetEnumeratorのパブリック定義を含みません。私は複数のメソッドをstackoverflow(IEnumerable、複数のリストを追加する)を提案したが、成功しなかった。 XMLスキーマには、SynexB2B、SynnexB2BshipNotice3D、SynnexB2BShipNotice3dPackage(このパッケージの下にあるタグ)、SynnexB2bShipNotice3DpackageItem(アイテムのタグはこれに該当します)のクラスがあります。 ヘルプをいただければ幸いです。C#でXMLファイルの再帰的ヘッダーを解析する方法

<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; } 
    }   
} 
+0

ようなものが必要ないと思います。 –

答えて

0

私はあなたが、実際のコードがなければ支援するための手立てをこの

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; } 
    } 
} 
関連する問題