C# XML仅在文本匹配条件时获取元素

C# XML仅在文本匹配条件时获取元素,c#,xml,C#,Xml,我的最终输出结果如下所示: using (XmlReader xmlReader = XmlReader.Create(zdPath)) { xmlReader.MoveToContent(); while(xmlReader.Read()) { if(xmlReader.IsStartElement()) { switch (xmlReader.Nam

我的最终输出结果如下所示:

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

我不完全确定为什么会这样,但确实如此。将xmlReader.Read()添加到每个案例中可以让我知道下一个元素的值。不管怎样,我认为这就是正在发生的事情

PCONE
--blank line--
--blank line--
PCTWO

您应该为此使用XPath或XSLT
PCONE
--blank line--
--blank line--
PCTWO
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;
            }
        }
    }
}