2011-01-24 5 views
1

나는 다음과 같은 XML 파일이 :XmlTextReader는 문제

<?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; 
} 

그래서 얻을 : 정확히 동일한 코드 및 데이터를 내 테스트에서 alt text http://www.freeimagehosting.net/uploads/deee5af3f3.jpg

+1

나는 당신이보고있는 것과 같은 행동을 보지 못합니다. Debug.Log -> Console.WriteLine이라는 작은 변경을 한 코드를 복사하고 프로파일이 세 번 읽히는 것을 봅니다. 읽고있는 파일을 읽고 계십니까? while 문의 맨 위에있는 textReader.ReadOuterXml()을 사용하여 읽고있는 파일의 내용을 정확히 확인하십시오. – btlog

답변

0

출력. 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 
+0

고마워!, 나는 Debug.Log()가 각 결과를 매우 천천히 인쇄한다는 것을 발견했다. Console.WriteLine()을 사용할 수 없지만 대신에 동일한 문자열의 모든 결과를 연결하고 마지막에는 구문 분석이 완료되었습니다. – chuckSaldana

0

유효하지 않은 XML입니다. XML 사양에서는 하나의 루트 노드 만 허용되며 (처리 지침은 노드로 계산되지 않음) 입력 스트림에는 여러 루트 노드가 포함됩니다. 만약 당신이 validator를 통해 그것을 barf 것이다.