2012-04-14 13 views
5

私は初心者のプログラマーで、C#とWebサービスを使い始めています。私のWebサービスのService.csファイルでXmlTextReaderの使用

、私はIService.csで作成された私は、既存のXMLファイルを読み込み、そこからデータを取得し、対応するプロパティ(DataMembers)にそれを置くしようとしていますReadXMLFile()メソッドを作成しますファイル。

私の問題は、私のコードは基本的に何もしていないということです。私はこれについてのWebサイトやチュートリアルを探してみましたが、本当にそこにはあまりありません、特に自分のような初心者のために。今まで何を試みてきたのかは明らかに間違っているので、誰がどのように私はこれについてどうすべきか考えている。

以下は私の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(); 
     } 
    } 
} 

これはおそらく、あなたのwhileループでIsStartElement()条件が欠落している私の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 (reader.Read()) 
{ 
    if (reader.IsStartElement()) 
    { 
     if (reader.Name == "id") 
     { 
      id = reader.ReadString(); 
     } 
... 
} 

また、それが容易になるだろうXPathまたはLINQ to XMLを使用してXMLを読んでください。もちろん、ファイルによって異なります。いくつか例があります:XPathLINQ

EDITは: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」が真であるが、その要素の値とその真のではないとき。それは、読者オブジェクトが次のNodetype(XmlNodeType.Element)を読むことを意味します。この場合、XMLファイルを見て、reader.Read();を使用してください。関数はXmlNodeType.Textである次のノードを読み込み、その値はJoeです。あなたの仕事のバージョンの例を教えてください。あなたは[XMLファイルを解析するためのベストプラクティス]を見つけることができ

関連する問題