2010-12-05 4 views
0

프로그래밍에 익숙하지 않고 심각한 문제가 발생하여 그것을 벗어날 수 없습니다.XML 태그 xith XMLReader의 가치 얻기 및 LinkedList에 추가 C#

5 개의 XML URL이 있습니다. http://www.shopandmiles.com/xml/3_119_3.xml

값을 가져 와서 관련 열의 데이터베이스에 써야하는 XML URL입니다. 열 이름과 XML 태그 이름이 일치합니다.

아래 코드를 작성하면 reader 요소에서 null xml 값이 누적됩니다. 일부 태그에는 값이 없습니다. 나는 그 링크 된 목록에 null을 추가해야한다. 왜냐하면 그 코드 이후에, 링크 된리스트를 통과 할 것이지만, ı 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 태그의 끝 요소를 찾습니다. 아래 코드는 비어있는 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; 
       } 
      } 
     } 
관련 문제