LINQ To XML Where clause selects nothing

I'm just trying to read some details from an XML file, part of which looks like this:

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

I have several of these "appender" nodes in my xml file. The following code goes through each "appender" node. Inside each "appender" I want to highlight the node parameter named "File" and check if the value matches what I'm looking for.

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

However, my code doesn’t print anything, so I think that maybe some part of my LINQ query is wrong, can anyone determine where I am going wrong?

+3
source share
3 answers

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;

: btw:

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

EDIT: , , XML.

+8

XML , . XML/TXT, #.

+8

You avoid your slashes in the where clause, but XML already has double slashes - try adding @ at the beginning of lines in the where clause to avoid escaping (and take the line literally) and see if it helps:

eg.

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

All Articles