Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# 如何阅读此XML部分?_C#_Xml_Web - Fatal编程技术网

C# 如何阅读此XML部分?

C# 如何阅读此XML部分?,c#,xml,web,C#,Xml,Web,我有一个指向在线XML文件的链接,我在应用程序中读取了该文件。 这是XML的一部分: <ActueleVertrekTijden> <VertrekkendeTrein> <RitNummer>4085</RitNummer> <VertrekTijd>2014-06-13T22:00:00+0200</VertrekTijd> <EindBestemming>Rotterdam Centraal&

我有一个指向在线XML文件的链接,我在应用程序中读取了该文件。 这是XML的一部分:

<ActueleVertrekTijden>
 <VertrekkendeTrein>
  <RitNummer>4085</RitNummer>
  <VertrekTijd>2014-06-13T22:00:00+0200</VertrekTijd>
  <EindBestemming>Rotterdam Centraal</EindBestemming>
  <TreinSoort>Sprinter</TreinSoort>
  <RouteTekst>A'dam Sloterdijk, Amsterdam C., Duivendrecht</RouteTekst> 
  <Vervoerder>NS</Vervoerder>
  <VertrekSpoor wijziging="false">4</VertrekSpoor>
  <Opmerkingen>
    <Opmerking> Rijdt vandaag niet</Opmerking>
  </Opmerkingen>
 </VertrekkendeTrein>
</ActueleVertrekTijden>

有没有办法让我为“Opmerking”辩护


谢谢

您可以尝试将XML节点列表/集合转换为可查询的数据结构,并使用
System.Linq
查看它是否包含和操作。虽然这是我的首选,因为我已经做了很多数据库查询

在您的情况下,使用
switch
语句和许多情况,您可以尝试以下操作:

在“Opmerkingen”的情况下,嵌套另一个情况,以查看它是否有子节点“Opmerking”,然后对该“Opmerking”节点执行一些操作。或者让case“Opmerkingen”调用一个函数来处理“opmerking”节点

编辑以下示例:

   foreach (XmlNode nodelist2 in nodeList)
       {//14  101517
        //int i = 0;//if (i == 0) { i++; }
           if (i < 1) //1
           {

             switch (nodelist2.Name)
              {
                case "VertrekTijd": string kuttijd1 = (nodelist2.InnerText);
                var res1 = Regex.Match(kuttijd1, @"\d{1,2}:\d{1,2}").Value;
                lblv1.Text = Convert.ToString(res1); break;
                case "VertrekVertragingTekst": var tobiasisnietvantexel1 = (nodelist2.InnerText); if (tobiasisnietvantexel1 == null) {} else{ ververt1.Text = tobiasisnietvantexel1; ververt1.Visible = true; vertpic1.Visible = true; logo1.Top -= 9; lblts1.Top -= 9; } break;
                case "EindBestemming": string vertrek1 = (nodelist2.InnerText); if (vertrek1 == "Uitgeest") { lblvia1.Text = "Krommenie-Ass"; } lblbs1.Text = vertrek1; break;
                case "TreinSoort": lblts1.Text = (nodelist2.InnerText); break;
                case "RouteTekst": lblvia1.Text = (nodelist2.InnerText); break;
                case "VertrekSpoor": lbls1.Text = (nodelist2.InnerText); i++;  break;

                //Here's the case you might try adding
                case "Opmerkingen": var SomeVar = OpmerkingenMethod(nodelist2); break; 
                //or do something else that you want to do, instead of breaking,
                //I do not know what you want to do with Opmerking when you get it
                // so I just had the function output into another variable.
               }


            }
       }
这可能更符合您的需求,同样,我没有测试代码,这只是为了演示实现您需求的代码

private string OpmerkingenMethod(XmlNode node)
{
     //Do something with XmlNode Opmerkingen
     var child = node.FistChild;

     if(child.name == "Opmerking") 
     {
          return child.InnerText // or whatever you want
     }
     else { return "" ; }

}

在Opmerkingen的情况下,您可以调用此方法并检查输出,如果它是您想要的,
break
switch语句,如果它不是您想要的(因为没有opmerking或其他内容),您可以
继续
到下一种情况,或者
break
转到nodelist中的下一个节点。同样,关键是在看到Opmerkingen时调用该方法,以便可以获得Opmerkingen中的节点或值最简单而不是最优雅的解决方案是从“Opmerkingen”节点列表中提取子节点:

case "Opmerkingen":
{
    XmlNodeList nodeListOp = nodelist2.SelectNodes("Opmerking");
    foreach (XmlNode node in nodeListOp)
    {
        if (node.Name == "Opmerking")
        {
            // your "Opmerking" stuff here
        }
    }
    break;
}

你是说像这样的事吗?案例“Opmerkingen”:案例“Opmerking”:var texeliseeneiland?是的,因此在案例“Opmerkingen”中,您将调用一个方法,该方法将接收当前节点,并且在该方法中,您将看到该Opmerkingen节点是否包含Opmerking,它可以对Opmerking执行任何您想要的操作。我将编辑我的帖子,让它更清晰。记住,如果你喜欢我的答案,请投上一票,或者检查它是否符合你的要求。当然,如果我错了,不要那样做!我只想多建立一点我的代表。
case "Opmerkingen/Opmerking": var texeliseeneiland1 
   foreach (XmlNode nodelist2 in nodeList)
       {//14  101517
        //int i = 0;//if (i == 0) { i++; }
           if (i < 1) //1
           {

             switch (nodelist2.Name)
              {
                case "VertrekTijd": string kuttijd1 = (nodelist2.InnerText);
                var res1 = Regex.Match(kuttijd1, @"\d{1,2}:\d{1,2}").Value;
                lblv1.Text = Convert.ToString(res1); break;
                case "VertrekVertragingTekst": var tobiasisnietvantexel1 = (nodelist2.InnerText); if (tobiasisnietvantexel1 == null) {} else{ ververt1.Text = tobiasisnietvantexel1; ververt1.Visible = true; vertpic1.Visible = true; logo1.Top -= 9; lblts1.Top -= 9; } break;
                case "EindBestemming": string vertrek1 = (nodelist2.InnerText); if (vertrek1 == "Uitgeest") { lblvia1.Text = "Krommenie-Ass"; } lblbs1.Text = vertrek1; break;
                case "TreinSoort": lblts1.Text = (nodelist2.InnerText); break;
                case "RouteTekst": lblvia1.Text = (nodelist2.InnerText); break;
                case "VertrekSpoor": lbls1.Text = (nodelist2.InnerText); i++;  break;

                //Here's the case you might try adding
                case "Opmerkingen": var SomeVar = OpmerkingenMethod(nodelist2); break; 
                //or do something else that you want to do, instead of breaking,
                //I do not know what you want to do with Opmerking when you get it
                // so I just had the function output into another variable.
               }


            }
       }
private string OpmerkingenMethod(XmlNode node)
{
     //Do something with XmlNode Opmerkingen
     var something = node.Name  //Or whatever you want from Opmerkingen node
     return something
}
private string OpmerkingenMethod(XmlNode node)
{
     //Do something with XmlNode Opmerkingen
     var child = node.FistChild;

     if(child.name == "Opmerking") 
     {
          return child.InnerText // or whatever you want
     }
     else { return "" ; }

}
case "Opmerkingen":
{
    XmlNodeList nodeListOp = nodelist2.SelectNodes("Opmerking");
    foreach (XmlNode node in nodeListOp)
    {
        if (node.Name == "Opmerking")
        {
            // your "Opmerking" stuff here
        }
    }
    break;
}