Duk*_*ade 3 c# xml linq-to-xml
我只是想从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>
Run Code Online (Sandbox Code Playgroud)
我的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
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的代码没有打印出来,所以我想可能我的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;
Run Code Online (Sandbox Code Playgroud)
我个人不打扰这里的查询表达式,顺便说一下:
var elements = node.Elements("param")
.Where(el => (string) el.Attribute("value") == "C:\\Logs\\File.log")
Run Code Online (Sandbox Code Playgroud)
编辑:此外,正如其他人所说,你想在XML文件中有单个反斜杠.