Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlReader类读取XML_C#_.net_Xml_Xmlreader - Fatal编程技术网

C# 使用XmlReader类读取XML

C# 使用XmlReader类读取XML,c#,.net,xml,xmlreader,C#,.net,Xml,Xmlreader,我有一个XML文件,格式如下: <Votes> <Candidate> <CandidateName>Boris Johnson</CandidateName> </Candidate> <Vote> <VoteString>1 3 6 2 9 7 4 5 8</VoteString> </Vote> </Votes> 调试中发

我有一个XML文件,格式如下:

<Votes>
   <Candidate>
      <CandidateName>Boris Johnson</CandidateName>
   </Candidate>
   <Vote>
      <VoteString>1 3 6 2 9 7 4 5 8</VoteString>
   </Vote>
</Votes>
调试中发生的情况是,
reader.Name
被设置为“投票”,我的switch语句中的两种情况永远不会被触发。我浏览了
XmlReader
方法,找到了一些列出了所有元素但什么都没有的东西


我以前没有直接处理过XML文件,所以我不确定使用的XML格式是否正确。我这样做对吗?

XmlReader适用于快速、正向读取操作。通过在一个循环中使用Read、Skip和读者公开的大量其他方法,可以实现您想要做的事情。或者,您可以切换到XmlDocument并按名称、id、xpath等选择节点

XmlReader: while(reader.Read()) { ... }

XML文档: XmlDocument doc=新的XmlDocument(); 文档加载(文件路径)

var nodes=doc.GetELementsByTagName(“候选名称”);
nodes=doc.GetElementsByTagName(“投票”)

XmlReader适用于快速、正向读取操作。通过在一个循环中使用Read、Skip和读者公开的大量其他方法,可以实现您想要做的事情。或者,您可以切换到XmlDocument并按名称、id、xpath等选择节点

XmlReader: while(reader.Read()) { ... }

XML文档: XmlDocument doc=新的XmlDocument(); 文档加载(文件路径)

var nodes=doc.GetELementsByTagName(“候选名称”);
nodes=doc.GetElementsByTagName(“投票”)

XmlReader适用于快速、正向读取操作。通过在一个循环中使用Read、Skip和读者公开的大量其他方法,可以实现您想要做的事情。或者,您可以切换到XmlDocument并按名称、id、xpath等选择节点

XmlReader: while(reader.Read()) { ... }

XML文档: XmlDocument doc=新的XmlDocument(); 文档加载(文件路径)

var nodes=doc.GetELementsByTagName(“候选名称”);
nodes=doc.GetElementsByTagName(“投票”)

XmlReader适用于快速、正向读取操作。通过在一个循环中使用Read、Skip和读者公开的大量其他方法,可以实现您想要做的事情。或者,您可以切换到XmlDocument并按名称、id、xpath等选择节点

XmlReader: while(reader.Read()) { ... }

XML文档: XmlDocument doc=新的XmlDocument(); 文档加载(文件路径)

var nodes=doc.GetELementsByTagName(“候选名称”);
nodes=doc.GetElementsByTagName(“投票”)

XML读取器将读取XML树中的每个元素,因此,如果还没有通过将读取器放入循环中达到所需的节点,则只需继续读取。您的代码需要继续在XML中循环,因此它需要看起来更像这样:

using (XmlReader reader = XmlReader.Create(filepath))
{
   while(reader.Read())
   {
      if (reader.IsStartElement())
      {
         switch (reader.Name)
         {
            case "Candidate":
            string name = reader["CandidateName"];
            break;

            case "Vote":
            string voteStr = reader["VoteString"];
            break;
         }
      }
   }
}

当然,这里更重要的问题是,你想用你得到的价值观做什么?您当前的代码除了将值分配给一个立即超出范围的变量之外,实际上对这些值没有做任何处理。

XML reader将读取XML树中的每个元素,因此如果您还没有通过将读取器放入循环中来命中所需的节点,则只需继续执行。您的代码需要继续在XML中循环,因此它需要看起来更像这样:

using (XmlReader reader = XmlReader.Create(filepath))
{
   while(reader.Read())
   {
      if (reader.IsStartElement())
      {
         switch (reader.Name)
         {
            case "Candidate":
            string name = reader["CandidateName"];
            break;

            case "Vote":
            string voteStr = reader["VoteString"];
            break;
         }
      }
   }
}

当然,这里更重要的问题是,你想用你得到的价值观做什么?您当前的代码除了将值分配给一个立即超出范围的变量之外,实际上对这些值没有做任何处理。

XML reader将读取XML树中的每个元素,因此如果您还没有通过将读取器放入循环中来命中所需的节点,则只需继续执行。您的代码需要继续在XML中循环,因此它需要看起来更像这样:

using (XmlReader reader = XmlReader.Create(filepath))
{
   while(reader.Read())
   {
      if (reader.IsStartElement())
      {
         switch (reader.Name)
         {
            case "Candidate":
            string name = reader["CandidateName"];
            break;

            case "Vote":
            string voteStr = reader["VoteString"];
            break;
         }
      }
   }
}

当然,这里更重要的问题是,你想用你得到的价值观做什么?您当前的代码除了将值分配给一个立即超出范围的变量之外,实际上对这些值没有做任何处理。

XML reader将读取XML树中的每个元素,因此如果您还没有通过将读取器放入循环中来命中所需的节点,则只需继续执行。您的代码需要继续在XML中循环,因此它需要看起来更像这样:

using (XmlReader reader = XmlReader.Create(filepath))
{
   while(reader.Read())
   {
      if (reader.IsStartElement())
      {
         switch (reader.Name)
         {
            case "Candidate":
            string name = reader["CandidateName"];
            break;

            case "Vote":
            string voteStr = reader["VoteString"];
            break;
         }
      }
   }
}
当然,这里更重要的问题是,你想用你得到的价值观做什么?您当前的代码实际上并没有对这些值做任何处理,只是将它们分配给一个立即超出范围的变量