[英]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.