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