2012-04-19 4 views
0

내 XML 파일을 읽으려고하면 두 번 읽히고 이러한 오류를 수정하는 방법이 확실하지 않습니다. 나는 어떤 종류의 고리를 가질 수 있다고 생각했지만 아직도 잃어버린 메신저. 어떤 도움을 주셔서 감사합니다. - xml 파일을 올바르게 기록하지만 읽으면 복제가 발생합니다.xml 파일을 읽을 때 노드의 복사본을 읽습니다.

String workingDir = Directory.GetCurrentDirectory(); 
XmlTextReader textReader = new XmlTextReader(workingDir + @"\xmldoc.xml"); 

Console.WriteLine("BaseURI:" + textReader.BaseURI); 
textReader.Read(); 

while (textReader.Read()) 
{ 
    if (textReader.Name == "test") 
    { 

     textReader.Read(); 
     XmlNodeType nType = textReader.NodeType; 

     if (nType == XmlNodeType.Text) 
     { 
      // label.Text = textReader.Value.ToString(); 
      Label l = new Label(); 
      System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a); 
      l.Location = l1; 
      l.Text = textReader.Value.ToString(); 

      a += 20; 
     } 
+4

어떻게 관찰 했나요? '두 번 읽는 것 같습니다.' – sll

+2

중요한 데이터가 아닌 경우 읽을 XML 샘플을 게시 할 수 있습니까? 무슨 일이 일어나고 있는지 파악하는 데 도움이 될 수 있습니다. 또한, 거대한 입력을 기대하지 않는다면 XmlDocument (또는 LINQ-y를 사용하는 경우 XDocument)를 사용하는 것이 더 직관적 일 수 있습니다. 나는 항상 XmlReader가 더러운 코드로 이어진다는 것을 안다. – LexyStardust

+2

참고로, 당신은'new XmlTextReader()'를 사용하면 안된다. .NET 2.0 이후로는 사용되지 않습니다. 대신에'XmlReader.Create()'를 사용하십시오. –

답변

0

? 이 경우,이 메소드가 두 번 호출되지 않았는지 확인하십시오 (Visual Studio에서 Shift + F12를 눌러 사용법을 찾으십시오). 또한 여기에 가입 한 코드가 완전하지 않은 것으로 보입니다 (변수 'a'선언이 없습니다). 동일한 작업을 수행하는 코드가 if (textReader.Name == "test")에서 실행 되었습니까?

0

나는 당신이 정말로 무엇을하려고 아무 생각, 그리고 XML의 대한 가시성이 없지만, 여기에 내가 그것을 얼마나 약입니다.

참고 : 나는 XmlReader를 < 사용하고

  1. - (이하 와플을 기본 클래스, 그래서 거기에) 더 나은 이럴 그것의 나는)이 있으며, toString (없이 "reader.Value"를 사용하고
  2. 이미 문자열 유형입니다.
  3. 나는 나는 그들이 깨끗한 생각으로 스위치 수를 변경하지만, 거기 XmlNodeTypes 많이 있습니다 그리고 당신은 훨씬에/다른 경우 싶지 않아!

코드 :

일부 항목이 두 번 읽을 생각하게 무엇
 XmlReader reader = XmlReader.Create("books.xml"); 
     while (reader.Read()) 
     { 
      switch (reader.NodeType) 
      { 
       case XmlNodeType.Element: // The node is an element. 
        //DO NOTHING 
        break; 
       case XmlNodeType.Text: //Display the text in each element. 
        //label.Text = reader.Value; 
        Label l = new Label(); 
        System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a); 
        l.Location = l1; 
        l.Text = reader.Value; 
        a += 20; 
        break; 
       case XmlNodeType.EndElement: //Display the end of the element. 
        //DO NOTHING 
        break; 
      } 
     } 
관련 문제