6

私は C# と Web サービスから始める初心者プログラマーです。

Service.csWeb サービスのファイルでReadXMLFile()、既存の XML ファイルを読み取ろうとするメソッドを作成し、そこからデータを取得して、IService.csファイル内に作成した対応するプロパティ (DataMembers) に配置します。

私の問題は、私のコードが基本的に何もしていないことです。これに関する 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();
        }
    }
}

これは私の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>
4

3 に答える 3

5

whileループにIsStartElement()条件がない可能性があります。

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

また、 XPathまたはLINQ to XMLを使用してXMLを読み取る方が簡単です。もちろん、ファイルによって異なります。次にいくつかの例を示します:XPathLINQ

編集:XMLファイルの詳細を見た後

student現在とそのを追跡するためにロジックを更新する必要がありますtestscorescountまた、それは属性であることに注意してください。すぐに乱雑になる可能性があります。上記のサンプルをご覧になることをお勧めします。

于 2012-04-14T04:03:50.077 に答える
3

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);
       }
    }
}
于 2013-03-15T09:30:57.360 に答える