簡體   English   中英

使用XmlReader類讀取XML

[英]Reading XML with XmlReader class

我有以下格式的XML文件:

<Votes>
   <Candidate>
      <CandidateName>Boris Johnson</CandidateName>
   </Candidate>
   <Vote>
      <VoteString>1 3 6 2 9 7 4 5 8</VoteString>
   </Vote>
</Votes>

我想先閱讀CandidateName ,然后閱讀VoteString 我正在使用以下代碼:

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

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

在調試中發生的是將reader.Name設置為“ Votes”,而我的switch語句中的兩種情況從未觸發過。 我已經查看了XmlReader方法,以查找列出所有元素的內容,但沒有任何內容。

之前我還沒有直接處理XML文件,所以不確定使用的XML格式是否正確。 我要這樣做正確嗎?

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

當然,這里更重要的問題是您要如何處理所獲得的那些價值觀? 您當前的代碼實際上不對值做任何事情,只是將它們分配給立即超出范圍的變量。

XmlReader非常適合快速向前閱讀操作。 您可以通過循環將閱讀器向前移動,使用“閱讀”,“跳過”以及閱讀器公開的其他方法來完成您想要做的事情。 或者,您可以切換到XmlDocument並按名稱,id,xpath等選擇節點。

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

XmlDocument:XmlDocument doc = new XmlDocument(); doc.Load(filepath);

var nodes = doc.GetELementsByTagName(“ CandidateName”); 節點= doc.GetElementsByTagName(“投票”);

暫無
暫無

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

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