2012-04-14 4 views
5

저는 C# 및 웹 서비스로 시작하는 초급 프로그래머입니다. 내 웹 서비스의 Service.cs 파일에서 XmlTextReader 사용

는, 내가, 기존의 XML 파일을 읽어 그것에서 데이터를 가지고 내가 IService.cs에서 만든 해당 속성 (DataMembers)에 배치하려고 오전 ReadXMLFile() 방법을 만들 파일.

제 문제는 기본적으로 내 코드가 아무 것도하지 않는다는 것입니다. 나는 이것에 웹 사이트 및 자습서를 찾는 시도했다 그러나 실제로 거기 밖으로 다량이 아니다, 특히 나 자신 같이 초심자를 위해. 내가 지금까지 해왔 던 일이 분명히 잘못 되었기 때문에 누구나 내가 어떻게해야하는지 알 수있다.

아래는 나의 ReadXMLFile() 방법입니다.

void ReadXMLFile() 
{ 
    XmlTextReader reader = new XmlTextReader("ClassRoll.xml"); 
    reader.Read(); 
    while (reader.Read()) 
    { 
     if (reader.Name == "id") 
     { 
      id = reader.ReadString(); 
     } 
     else if (reader.Name == "firstname") 
     { 
      link = reader.ReadString(); 
     } 
     else if (reader.Name == "lastname") 
     { 
      description = reader.ReadString(); 
     } 
     else if (reader.Name == "count") 
     { 
      description = reader.ReadString(); 
     } 
     else if (reader.Name == "testscore") 
     { 
      description = reader.ReadString(); 
     } 
    } 
} 

내 xml 파일의 예입니다

<classroll> 
    <student> 
    <id>101010</id> 
    <lastname>Smith</lastname> 
    <firstname>Joe</firstname> 
    <testscores count="5"> 
     <score>65</score> 
     <score>77</score> 
     <score>67</score> 
     <score>64</score> 
     <score>80</score> 
    </testscores> 
    </student> 
</classroll> 
+0

void ReadXMLFile() { XmlTextReader reader = new XmlTextReader("ClassRoll.xml"); reader.Read(); while (reader.Read()) { if (reader.Name == "id") { reader.Read(); if(reader.NodeType == XmlNodeType.Text) { id = reader.Value; reader.Read(); } } } 

} (http://stackoverflow.com/q/55828/1048330) – tenorsax

+0

유용 당신은 당신의 XML 파일 또는 샘플을 공유해야 너무 크면 구조를 볼 수 있습니다. –

+1

XmlTextReader를 직접 사용하면 안됩니다. 대신에'XmlReader.Create()'를 사용하십시오. –

답변

3

당신은 아마 당신의 while 루프에서 IsStartElement() 조건을 놓치고 : 또한

while (reader.Read()) 
{ 
    if (reader.IsStartElement()) 
    { 
     if (reader.Name == "id") 
     { 
      id = reader.ReadString(); 
     } 
... 
} 

, 그것은에 쉬울 것 XPath 또는 LINQ to XML을 사용하여 XML을 읽으십시오. 물론 파일에 따라 다릅니다. 몇 가지 예가 있습니다 : XPathLINQ.

편집는 : XML 파일 정보

을보고 한 후 현재 student하고 testscores을 추적하는 논리를 업데이트해야합니다. 또한 count은 특성입니다. 꽤 지저분해질 수 있습니다. 위에서 언급 한 샘플을 살펴 보시기 바랍니다.

+3

좋은 이유가 없다면 LINQ to XML (XElement 클래스)을 사용해야한다는 데 동의합니다. 문서가 너무 커서 전체를 한번에 메모리에 버릴 수 없다는 것을 알고 있습니다. – Mason

1

난 당신을 XmlDocument

public void ReadXML() 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load("<name file>.xml"); 
    xmlEntities = new List<XmlEntity>(); 

    foreach(XmlNode item in xmlDoc.ChildNodes) 
    { 
     GetChildren(item); 
    } 
} 

private void GetChildren(XmlNode node) 
{ 
    if (node.LocalName == "Строка") 
    { 
     //<you get the element here and work with it> 
    } 
    else 
    { 
     foreach (XmlNode item in node.ChildNodes) 
     { 
      GetChildren(item); 
     } 
    } 
} 
0

이유를 사용하여 최상의 결과를 얻을 생각은 작동하지 않는 때문에 예 : reader.Name는 == "FIRSTNAME는"사실이다하지만 그 요소의 값과의 사실이 아니다 때. 그것이 정확히 의미하는 것은 독자 객체가 XmlNodeType.Element 인 다음 Nodetype을 읽는 것입니다. 그래서이 경우 reader.Read();를 사용하여 XML 파일을 살펴보십시오. 함수는 다음 노드 (XmlNodeType.Text)를 다시 읽습니다. 그 값은 Joe입니다. 임 근무 버전의 예제를 주실 래요. 당신은 [XML 파일을 구문 분석하는 모범 사례]를 찾을 수 있습니다