2013-03-11 2 views
0

У меня есть файл размером 2GB xml, и я пытаюсь реализовать метод ReadToFollowing, но он немного напуган.ReadToFollowing XML Large File

Когда я использую это, я не могу заставить свои инструкции «if» работать. В основном xmlReader.ReadInnerXML() возвращает все узлы под iVehicle. Я предполагаю, что это все узлы для каждого iVehicle в документе (что, вероятно, я хочу, но мне также нужно получить дочерние узлы, чтобы я мог заполнить и вернуть свой объект (для каждого iVehicle).

 using (FileStream stream = new FileStream(uri, FileMode.Open, FileAccess.Read)) 
     { 
      XmlTextReader xmlReader = new XmlTextReader(stream); 

      while (xmlReader.ReadToFollowing("iVehicle")) 
      { 
       if(xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name.Equals("FamilyName")) 
       { 
        fundFamilyId = xmlReader.ReadInnerXml(); 
       } 
       if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name.Equals("InvestmentVehicle")) 
       { 
        secId = xmlReader.GetAttribute("_Id").ToString(); 
       } 

       if (el.NodeType == XmlNodeType.Element && el.Name == "TradingSymbol") 
       { 
        ticker = xmlReader.ReadInnerXml(); 
       } 

       yield return new parsedXML 
       { 
        Id = secId, 
        FamilyName = familyName, 
        TickerId = ticker, 
       }; 

      } 
     } 

Что мне нужно сделать, чтобы сделать эту работу?

ответ

1

ReadToFollowing("iVehicle") позиционирует читателя в начале следующего <iVehicle> узла Поэтому, учитывая, что преуспевает зовут iVehicle

чтобы добраться до <FamilyName> вы должны читать/Перейдите к нему, а затем используйте .Value или один из его вкусов, чтобы получить co ntent.

Подумайте, как XmlReader перемещает указатель через xml-файл, а затем вы получаете материал в указателе.

ReadInnerXml обычно используется для выбора узла и передачи его другому XmlReader, поэтому вы можете сломать код.