我有一个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;
}
}
}
在debug中发生的情况是reader.Name
被设置为“Votes”,并且switch语句中的两种情况永远不会被触发。我已经查看了XmlReader
方法,以找到列出所有元素的东西,但什么也没有。
我以前没有直接处理过XML文件,所以我不确定使用的XML格式是否正确。我这样做对吗
2条答案
按热度按时间xa9qqrwz1#
XML阅读器将读取XML树中的每个元素,因此如果您还没有通过将阅读器放入循环中来命中所需的节点,则只需继续读取。您的代码需要继续循环遍历XML,因此它需要看起来更像这样:
当然,这里更重要的问题是,你试图用你得到的这些值做什么?您当前的代码实际上并没有对这些值做任何事情,只是将它们赋给一个立即超出范围的变量。
r3i60tvu2#
XmlReader适用于快速、向前读取操作。您可以通过在循环中使用Read、Skip和由读取器公开的一大堆其他方法来向前移动读取器来完成您想要做的事情。或者,您可以切换到XmlDocument并按名称、id、xpath等选择节点。
XmlReader:while(reader.Read()){ ...}
XmlDocument:String getString = new String(); doc.Load(filepath);
var nodes = doc.GetElementsByTagName(“CandidateName”); public String s = doc.getElementsByTagName();