2017-04-12 22 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属性の値を持つ要素のターゲットから属性archiveAboveSizeの値を取得する必要があります。以下は私が書いたコードです。

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

しかし、私はいつも可変ノードのためにnullになっています。私はここで間違って何をしていますか?どんな助けでも大歓迎です。

答えて

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ファイルでネームスペースが使用されているためです。

関連する問題