簡體   English   中英

我如何閱讀該XML部分?

[英]How can I read this XML part?

我有一個在線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>

我想閱讀“ Opmerkingen”中列出的“ Opmerking”,它位於“ VertrekkendeTrein”中:

<Opmerkingen>
    <Opmerking> Rijdt vandaag niet</Opmerking>
</Opmerkingen>

問題在於它並不總是存在的,它取決於情況。

我可以閱讀其他部分,例如“ RitNummer”和“ Vervoerder”,並使用以下代碼來做到這一點:

string urlo = "THEWEBSITE";
            string resultje = HttpGeto(urlo);

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(resultje);
XmlNodeList nodeList = xmlDoc.SelectNodes("ActueleVertrekTijden/VertrekkendeTrein/*");



       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;


                   }


                }
           }

我做了很多嘗試:

case "Opmerking": var texeliseeneiland1 

case "Opmerkingen/Opmerking": var texeliseeneiland1 

有什么方法可以為“ Opmerking”辯護嗎?

謝謝!

最簡單但不是最優雅的解決方案是從“ Opmerkingen”節點列表中提取子節點:

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

您可以嘗試將XML節點列表/集合轉換為可查詢的數據結構,並使用System.Linq來查看它是否包含和Opmerking。 盡管那是我的偏愛,因為我一直在進行很多數據庫查詢。

在您的情況下,對於switch語句和許多情況,您可以嘗試以下操作:

對於“ Opmerkingen”,嵌套另一個案例以查看其是否具有子節點“ Opmerking”,然后對該“ Opmerking”節點進行操作。 或者讓案例“ 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.
               }


            }
       }

這是在Opmerkingen情況下可能使用的方法的示例,以便您可以使用Opmerking並執行一些操作。 再說一次,我不知道你到底想做什么

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 "" ; }

}

您可以在Opmerkingen的情況下調用此方法並檢查輸出,如果是您想要的,則break switch語句,如果不是您想要的(因為沒有opmerking或其他東西),則可以continue進行下一種情況,或break轉到節點列表中的下一個節點。 同樣,關鍵是在看到Opmerkingen時調用該方法,以便可以獲取Opmerkingen內部的節點或值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM