2017-04-12 50 views
2

我試圖讀取屬性的值,檢查另一個屬性的值。下面是我有的XML的內容。從XPath檢索屬性值與來自同一節點的另一個屬性值匹配

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets> 
    <target name="default" xsi:type="File" layout="${longdate}${message}${exception:format=tostring}" fileName="${basedir}/logs/Test24x7.txt" archiveAboveSize="999000" maxArchiveFiles="100" archiveEvery="Day"/> 
    <target name="f7" xsi:type="File" layout="${longdate}${message}${exception:format=tostring}" fileName="${basedir}/logs/Errors/error.txt" archiveAboveSize="300000" maxArchiveFiles="100" archiveEvery="Day"/> 
    </targets> 
    <rules> 
    <!-- <logger name="*" minLevel="Debug" appendTo="f0"/> --> 
    <logger name="*" minLevel="Info" appendTo="default"/> 
    <logger name="*" minLevel="Error" appendTo="f7"/> 
    </rules> 
</nlog> 

在這裏,我需要從name屬性值爲「default」的元素目標中獲取屬性archiveAboveSize的值。以下是我寫的代碼。

XmlDocument doc = new XmlDocument(); 
doc.Load("file.exe.nlog"); 
var node = doc.DocumentElement.SelectSingleNode("//nlog/targets/target[@name = 'default']/@archiveAboveSize"); 
return node.Value; 

但是我變量節點一直變空。我在這裏做錯了什麼?任何幫助將非常感激。

回答

2

您可以使用Linq to XML來獲取所需的屬性值。

使用此行:

var doc = XDocument.Load("file.exe.nlog");  

可以加載XML文件,然後使用查詢它:

var res = doc.Descendants() 
      .Where(e => e.Name.LocalName == "target") 
      .Where(e => e.Attribute("name").Value == "default") 
      .First() 
      .Attribute("archiveAboveSize").Value; 

LocalName財產的使用。這是由於您的xml文件中使用了一個命名空間。

相關問題