<cataloglist>
<catalogentry>
<machinename>PCONE</machinename>
<rolename>userPC</rolename>
<rolename>Admin</rolename>
</catalogentry>
<catalogentry>
<machinename>PCTWO</machinename>
<rolename>userPC</rolename>
<rolename>Admin</rolename>
<rolename>Controller</rolename>
</catalogentry>
</cataloglist>
下面的代码会立即抓取机器名称(因为只有一个),但我可能会有不确定数量的角色名称。我想扫描角色名,看看是否有角色名称&#34; Admin&#34;例如,存在。那么,代码正确地识别出&#34; Admin&#34;是一个角色名,并输入if语句,但我尝试过的所有内容都打印出空格。如果我删除了条件,那么角色名称将按预期输出。
using (XmlReader xmlReader = XmlReader.Create(zdPath))
{
xmlReader.MoveToContent();
while(xmlReader.Read())
{
if(xmlReader.IsStartElement())
{
switch (xmlReader.Name.ToLower())
{
case "machinename":
Console.WriteLine(xmlReader.ReadString().Trim());
break;
case "rolename":
if (xmlReader.ReadString() == "Admin")
{
Console.WriteLine(xmlReader.Value) //Whitespace
Console.WriteLine(xmlReader.ReadString());//Whitespace
}
break;
}
}
}
}
我的最终输出最终看起来像这样:
PCONE
--blank line--
--blank line--
PCTWO
答案 0 :(得分:-1)
我不完全确定为什么会这样,但确实如此。在每种情况下添加xmlReader.Read()将允许我知道下一个元素值。无论如何,这就是我认为正在发生的事情。
using (XmlReader xmlReader = XmlReader.Create(zdPath))
{
xmlReader.MoveToContent();
while(xmlReader.Read())
{
if(xmlReader.IsStartElement())
{
switch (xmlReader.Name.ToLower())
{
case "machinename":
xmlReader.Read();
string clientName = xmlReader.Value;
Console.WriteLine(xmlReader.Value);
break;
case "rolename":
xmlReader.Read();
string role = xmlReader.Value;
if (role == "Admin")
{
Console.WriteLine(xmlReader.Value);
}
break;
}
}
}
}