如果文本匹配条件,则XML仅获取元素

时间:2014-10-30 21:33:15

标签: c# xml

<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

1 个答案:

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