2012-04-14 5 views
0

방금 ​​XMLTextReader를 작동 시키려고 시도한 것에 대해 게시했습니다. 불행히도 이제는 if 문에 문제가 있기 때문에 XML 파일에서 데이터를 가져올 수 없습니다. 나는이 if 문을 다른 if 문 안에 넣어야합니다. 왜냐하면 먼저 Student 클래스를 생성해야하기 때문입니다. 나는 더 이상 이것에 접근하는 방법을 모른다. 아래는 내 코드이며, 나는 그것이 어리석은 것이라고 확신한다. 나는 내가 실종되었다는 것을 알고 있으므로 코딩이 좋지 않다.중첩 된 문이 작동하지 않습니다.

while (reader.Read()) 
    { 
     reader.MoveToContent();    

     if (reader.NodeType == XmlNodeType.Element && reader.Name == "student") 
     { 
      Student s = new Student(); 

       if (reader.Name == "id") 
       { 
        s.ID = reader.ReadString(); 
       } 
       if (reader.Name == "firstname") 
       { 
        s.FirstName = reader.ReadString(); 
       } 
       if (reader.Name == "lastname") 
       { 
        s.LastName = reader.ReadString(); 
       } 
       if (reader.Name == "score") 
       { 
        s.TestScores.Add(Convert.ToInt32(reader.ReadString())); 
       } 
      s.Average = 6.00; 
      Students.Add(s); 
     } 
    } 

[편집] 내가) (reader.MoveToCOntent와 다음 행으로 이동하기 위해 XmlReader를 말할 후에도; 그것은 여전히 ​​모든 if 문을 건너 뜁니다.

저는 프로그래밍에 초보자입니다. 새로운 아이디어와 제안을 주시면 감사하겠습니다.

+0

그래서 "작동하지 않는"것은 무엇이며 어떻게 작동하지 않는 걸까요? * 실제 * 문제가 제목에서 요약 될 수없는 한, 이것은 폐지되어야합니다. –

+2

다른 질문에 더 관련있는 anwer : __do는 XmlReader__를 사용하지 마십시오 (데이터가 100MB를 초과하지 않는 한) –

+0

디버거를 사용하여 첫 번째 if 문이 유효한지 확인한 후 다음 단계로 진행합니다. 그러나 reader.Name == "student"인지 확인한 다음 reader.Name == "something different"인지 다시 확인하는 것이 이상하게 보입니다. –

답변

2

첫 번째 if 문을 true로 설정하려면 reader.Name이 이미 "학생"이어야합니다. 중첩 된 ifreader.Name 값이 "student"가 아닌지 검사합니다. 항상 false입니다.

+0

빠른 응답을 주셔서 대단히 감사합니다. 유일한 문제는 새 Student를 만든 후에 reader.MoveToContent();를 추가하더라도 모든 if 문을 건너 뛰고 Student Average를 설정하고 목록에 추가한다는 것입니다. 어떤 제안? – Jess

+0

'reader.MoveToContent()'는 이미 콘텐츠 노드에있는 경우 리더를 앞으로 이동하지 않으므로 첫 번째'if' 검사 후에 다른 reader.MoveToContent()를 실행하면 아무 것도 수행하지 않습니다. 이미 콘텐츠 노드에있는 동안 리더를 앞으로 이동하려면'Read()'를 실행해야합니다.'Read()'는 비 요소 노드 (예 : 공백)에 착륙 할 수 있으므로'MoveToContent() '와 결합해야합니다. – Tung

+1

덜 복잡한 방법을 시도해야하는 나머지 주석가들과 동의합니다 XML을 파싱하는 접근법. XmlReader는 효율적이지만 특히 큰 Xml을 파싱하지 않으므로 투자를해야만 투자 할 가치가 없을 수도 있습니다. XmlReader를 사용해야하는 경우 [문서] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx)를 참조하십시오. 각 방법이 어떻게 영향을 미치는지 이해해야합니다 리더의 현재 위치 – Tung

1

그것은 여전히 ​​학생에게 평균 설정 모든 명령문 경우와 건너 뛰어, 내가 생각하는 것이 우선 문자열에 대한 평등에 실패한다는 것입니다 목록

에 추가, 그래서 제일 먼저로 노력이, 잘 작동, 나는 코드가 제공 볼 양식을하지 않습니다 어떤 코드에서 뭔가 잘못 말을하지 않을 경우, 간단한 XmlDocument을 사용하고 작동하는지 확인하려고하지 않는 경우

if (reader.Name.Equals("id",StringComparison.InvariantCultureIgnoreCase)).. 

입니다 .

XmlDocument의 사용의 간단한 샘플이 여기에 찾을 수 있습니다

Reading XML File using XmlDocument

0

의 당신이 작동하지 않는 이유에 대해 약간의 오차가 업로드하지 않는 말을하는 것은 쉽지 않다. 구문에는 아무런 문제가 없습니다. 비주얼 스튜디오에서 디버깅 오류를보고 대신 세부 사항을 확인한다고 말하고 싶습니다. 오류를 이해하지 못하면 업로드 한 후 안내를들을 수 있습니다.

나는 리더를 닫아야한다고 생각합니다. 귀하의 독자가 열립니다. 끝에 reader.close()를 씁니다.

관련 문제