Проблема XmlTextReader - PullRequest
       19

Проблема XmlTextReader

1 голос
/ 25 января 2011

У меня есть следующий XML-файл:

<?xml version="1.0"?><!--This document contains the profiles that have been created.--><Profiles>
  <Profile>
    <name>One</name>
    <date>Two</date>
  </Profile>
  <Profile>
    <name>One</name>
    <date>Two</date>
  </Profile>
  <Profile>
    <name>One</name>
    <date>Two</date>
  </Profile>
</Profiles>

Проблема в том, что когда я использую XmlTextReader, он читает только первый профиль и игнорирует второй и третий.

    public ArrayList ReadProfiles() {

  ArrayList result = new ArrayList();
  Hashtable currentProfile = null;

  string currentName = "";
  string currentValue = "";  

  XmlTextReader textReader = new XmlTextReader(profilesPath);
  // Read until end of file
        while (textReader.Read()) {
   switch(textReader.NodeType) {

   case XmlNodeType.Text: {
    currentValue = textReader.Value;
    Debug.Log("found text = " + currentValue);
    }
    break;

   case XmlNodeType.Element: {
    currentName = textReader.Name;
    switch(currentName) {

    case "Profiles": 
     Debug.Log("found profiles");
     break;
    case "Profile":
     Debug.Log("found profile");
     break;
    case "name":
     Debug.Log("found name");
     break;
    case "date":
     Debug.Log ("found date");
     break;
    default:
     Debug.Log("default in");
     break;
    }
   }
    break;
   case XmlNodeType.Comment:
    Debug.Log("found comment");
    break;
   case XmlNodeType.EndElement:
    Debug.Log("found end element" + textReader.Name.ToString());
    break;
   default:
    Debug.Log("default out");
    break;
   }
  }

  textReader.Close();

  return result;
 }

так я получаю: альтернативный текст http://www.freeimagehosting.net/uploads/deee5af3f3.jpg

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

Это не допустимый XML.Спецификация XML допускает только один корневой узел (инструкции по обработке не считаются узлами), а ваш входной поток содержит несколько корневых узлов.Если вы введете это через валидатор, то это будет barf.

0 голосов
/ 25 января 2011

Вывод из моего теста с точно таким же кодом и данными. Замените Debug.Log на Writeline.

default out
found comment
found profiles
default out
found profile
default out
found name
found text = One
found end elementname
default out
found date
found text = Two
found end elementdate
default out
found end elementProfile
default out
found profile
default out
found name
found text = One
found end elementname
default out
found date
found text = Two
found end elementdate
default out
found end elementProfile
default out
found profile
default out
found name
found text = One
found end elementname
default out
found date
found text = Two
found end elementdate
default out
found end elementProfile
default out
found end elementProfiles
default out
...