2010-12-05 7 views
0

私はプログラミングには新しく、深刻な問題があり、それを脱することはできません。XMLタグxith XMLReaderの値を取得してLinkedListに追加するC#

私は5つのXML URLを持っています。 http://www.shopandmiles.com/xml/3_119_3.xml

これは、値を取得して関連する列にデータベースに書き込む必要があるXML URLです。 カラム名とXMLタグ名が一致しています。

私は以下のコードを書くと、リーダー要素はnull xml値を見逃しています。一部のタグには値がありません。私はそれらのnullをlinkedlistに追加する必要があります。なぜなら、そのコードの後、リンクされたリストを調べていますが、ıcantがnull xml値の値を追加すると、順序は一致しません。したがって、カラム名と内部のデータは一致しません。私は注文を失う。私のすべてのコードはここにあります、それが役立つ場合は、コード内のコメントをチェックすることもできます。皆さん、ありがとうございました。

public void WebServiceShopMilesCampaignsXMLRead(string URL) 
    { 
     XmlReader reader = XmlReader.Create(URL); 
     LinkedList<string> linkedList = new LinkedList<string>(); 

     List<ShopAndMilesCampaigns> shopMileCampaigns = new List<ShopAndMilesCampaigns>(); 

     try 
     { 
      while (reader.Read()) 
      { 
       switch (reader.NodeType) 
       { 
        case XmlNodeType.Text: 
         linkedList.AddLast(reader.Value); 
         break; 
       } 
      } 
     } 

     catch (XmlException exception) 
     { 
      Console.WriteLine("XML okurken bir sorun oluştu, hata detayı --> " + exception.Message); 
     } 

     LinkedListNode<string> node = linkedList.First; 

     while (node != null) 
     { 
      ShopAndMilesCampaigns shopMilesCampaign = new ShopAndMilesCampaigns(); 

      shopMilesCampaign.Name = node.Value; // Null values mixes up the order because i cant add as null with reader.read above 
      node = node.Next; 
      shopMilesCampaign.Summary = node.Value; 
      node = node.Next; 
      shopMilesCampaign.AccountName = node.Value; 
      node = node.Next; 
      shopMilesCampaign.Category = node.Value; 
      node = node.Next; 
      shopMilesCampaign.Sector = node.Value; 
      node = node.Next; 
      shopMilesCampaign.Details = node.Value; 
      node = node.Next; 
      shopMilesCampaign.Image = node.Value; 
      node = node.Next; 
      shopMilesCampaign.Status = 1; 
      node = node.Next; 

      shopMileCampaigns.Add(shopMilesCampaign); 
     } 

     foreach (ShopAndMilesCampaigns shopMileCampaign in shopMileCampaigns) 
     { 
      shopMileCampaign.Insert(); 
     } 
    } 
+0

どのくらいのデータがありますか? XmlReaderは時には面倒です。データが大きい場合(XML自体が貧しい選択かもしれません)、XmlSerializer(オブジェクトモデルに逆シリアル化)またはXElement(DOMに解析する)が好きです。それから、より親切な形でそれを使ってください... –

+0

データは大きくありません。すべてのURLは質問のような類似のデータを持っています。選択肢がなければ、私はこれらを試してみる –

答えて

0

回答が見つかりました。ここであなたに知らせることです。

XmlNodeTypeがElementと等しい場合、ループはXMLデータからの読み取りを続け、Whitesapcesを検索し、XMLタグのElementを終了します。以下のコードはXMLタグが空であってもXMLタグの正確な値を示しています。

public LinkedList<string> AddToLinkedList(XmlReader reader) 
    { 

     LinkedList<string> linkedList = new LinkedList<string>(); 

     try 
     { 
      while (reader.Read()) 
      { 
       switch (reader.NodeType) 
       { 
        case XmlNodeType.Element: 
         reader.Read(); 
        Start: 
         if (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Element) 
         { 
          reader.Read(); 
          goto Start; 
         } 
         else if (reader.NodeType == XmlNodeType.EndElement) 
         { 
          linkedList.AddLast(""); 
         } 
         else 
         { 
          linkedList.AddLast(reader.Value); 
         } 
         break; 
       } 
      } 
     } 
関連する問題