2014-10-30 67 views
-1
<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> 

我的代码在下面抓住机器名称(因为只有一个),但是我可以有不确定数量的角色名称。例如,我想扫描角色名称以查看角色名称“Admin”是否存在。那么,代码正确地标识“Admin”是一个角色名称,并输入if语句,但我试过的所有内容都会打印出空格。如果我删除条件,角色名称按预期输出。如果文本匹配条件,XML只获取元素

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

您应该为此使用XPath或XSLT – 2014-10-30 21:35:57

回答

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