使用XmlTextReader

Jes*_*ess 5 c# xml web-services xmltextreader

我是一名初学程序员,从C#和Web服务开始.

Service.cs我的Web服务文件中,我创建了一个ReadXMLFile()方法,我尝试读取现有的XML文件,从中获取数据并将其放入我在IService.cs文件中创建的相应属性(DataMembers).

我的问题是我的代码基本上没有做任何事情.我已经尝试过寻找网站和教程,但实际上并没有太多,特别是像我这样的初学者.任何人都知道我应该怎么做,因为我到目前为止所做的事情显然是错误的.

以下是我的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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

ten*_*ica 5

您可能在 while 循环中缺少 IsStartElement() 条件:

while (reader.Read())
{
    if (reader.IsStartElement())
    {
       if (reader.Name == "id")
       {
           id = reader.ReadString();
       }
...
}
Run Code Online (Sandbox Code Playgroud)

此外,使用XPathLINQ to XML来读取 XML会更容易,当然这取决于文件。下面是一些示例:XPathLINQ

编辑:在看到 XML 文件详细信息后

您应该更新您的逻辑以跟踪当前student及其testscores. 另外,请注意这count是一个属性。它很快就会变得混乱,我建议您查看上面提到的示例。

  • 我同意您应该使用 LINQ to XML(XElement 类),除非您有充分的理由不这样做 - 我知道的唯一充分理由是您的文档太大而无法一次全部放入内存。 (3认同)