繁体   English   中英

LINQ To XML中的“Where”子句没有选择任何内容

[英]'Where' clause in LINQ To XML not selecting anything

我只是想从XML文件中读取一些细节,其中一部分如下所示:

<appender name="FILE" class="applications.core.logging.CustomFileAppender">
    <param name="File" value="C:\\Logs\\File.log"/>
    <param name="MaxBackupIndex" value="5"/>
</appender>
<appender name="FILE" class="applications.core.logging.CustomFileAppender">
    <param name="File" value="C:\\Logs\\File2.log"/>
    <param name="MaxBackupIndex" value="17"/>
</appender>
<appender name="FILE" class="applications.core.logging.CustomFileAppender">
    <param name="File" value="C:\\Logs\\File3.log"/>
    <param name="MaxBackupIndex" value="98"/>
</appender>

我的XML文件中有几个'appender'节点。 以下代码循环遍历每个'appender'节点。 在每个“appender”中,我想要选择名为“File”的param节点,并检查该值是否等于我要查找的值。

foreach (XElement node in XmlFile.Descendants("appender"))
        {
            IEnumerable<XElement> elements = from el in node.Elements("param") 
                                             where el.Attribute("value").ToString().Equals("C:\\Logs\\File.log")) 
                                             select el;

            foreach (XElement el in elements)
            {
                Console.WriteLine("Found it " + el.Name);
                // Now read value for MaxBackupIndex
            }
        }

但是我的代码没有打印出来,所以我想可能我的LINQ查询的“where”部分是不正确的,任何人都可以找到我错的地方吗?

你正在调用XAttribute.ToString() 尝试使用XAttribute.Value代替,或者只是转换为字符串。 ToString()将返回value="C:\\\\Logs\\\\File.log" - 名称和值 - 而您只需要值:

var elements = from el in node.Elements("param")
               where (string) el.Attribute("value") == "C:\\Logs\\File.log"
               select el;

我个人不打扰这里的查询表达式,顺便说一下:

var elements = node.Elements("param")
         .Where(el => (string) el.Attribute("value") == "C:\\Logs\\File.log")

编辑: 此外 ,正如其他人所说,你想在XML文件中有单个反斜杠。

XML文件中的属性包含双倍斜杠,但您匹配单个斜杠。 要匹配XML / TXT文件中的双斜杠,需要在C#文件中使用四个斜杠。

你在where子句中转义了斜杠,但是XML已经有了双斜线 - 尝试在where子句的字符串前面添加一个@来逃避转义(并按字面意思取字符串),看看是否有帮助:

例如

el.Attribute("value").ToString().Equals(@"C:\\Logs\\File.log")) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM