2016-06-29 6 views
1

は、C#は、XMLノードの属性を取得し、ここで

でXMLを解析するに精通している人のための迅速な一つであり、私は以下のようにXMLファイルを持っている値。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral > 
     <section name="Proxy.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <Proxy.Properties.Settings> 
      <setting name="MaxLogs" serializeAs="String"> 
       <value>10</value> 
      </setting> 
      <setting name="MaxArchives" serializeAs="String"> 
       <value>3</value> 
      </setting> 
      <setting name="IpAddress" serializeAs="String"> 
       <value>COMPUTER2</value> 
      </setting> 
      <setting name="Port" serializeAs="String"> 
       <value>4050</value> 
      </setting> 
      <setting name="Index" serializeAs="String"> 
       <value>0</value> 
      </setting> 
     </Proxy.Properties.Settings> 
    </applicationSettings> 
</configuration> 

属性を読み取って「Port」などの名前を解析するだけで、値セット(この場合は「4050」)を取得することができます。

コンソール出力にノードを返す小さなスニペットのコードがあります。

string path = "C:\\Path\\To\\XML.exe.config"; 

XDocument xdoc = new XDocument(); 
xdoc = XDocument.Load(path); 

var jproxy = xdoc.DescendantNodes(); 

foreach (var dn in jproxy) 
{ 
    Console.WriteLine(dn.NextNode); 
} 

Console.ReadLine(); 

また、結果のリストを格納するのに便利な小さなクラスもあります。

public class Proxy 
{ 
    public string MaxLogs { get; set; } 
    public string MaxArchives { get; set; } 
    public string IPAddress { get; set; } 
    public string Port { get; set; } 
    public string Index { get; set; } 

} 

免責事項:私はここや他のサイト上で利用可能なソリューションのほとんどを研究しているが、それはただ、現時点では私のためにクリックされていない

。私はそれが私が思うより簡単だと知っているし、XPath、Linqなどを使用することができますが、この特定の問題のための任意の助けが大歓迎です。

XMLで作業するための最善の方法についてのアドバイスがありましたら、私は過去に苦労しているように、提案にも開いています。例えば、LinqやXPath、それら?

乾杯

+0

xmlサンプルが不正です。セクショングループとセクションの要素には、属性値の最後の二重引用符がありません。 – Veverke

+0

私はそれを匿名化しなければならなかったが、良いすべてをスポットしていた。 – Supernatix

答えて

1

このような何かはあなたにKeyValuePairのリスト内のすべてのデータを与えるだろう。そのクラスにあなたはリフレクションを使用するか、swtich /ケースをしなければならないのいずれかの提供を埋めるために、私はそのことを考えること他には何ももう少し一般的なないだろう:

  var proxies = (from i in xDoc.Descendants() 
         where i.Name.LocalName == "setting" 
         select new KeyValuePair<string, string>(i.Attribute("name").Value, i.Element("value").Value)).ToList(); 

編集:私は常に操作し、クエリにLINQを使用していましたXML文書(上記のコードに似ています)を使用して、XPathを使用することもできます。また、必要なすべてのシナリオをカバーしています。

+0

それは治療を働かせました、ありがとうございました。私は、今追加された値を取得し、解決策で質問を更新する作業をします。それに乾杯、私はあなたにビールを借りている! – Supernatix

+0

問題はありません。うれしいです! :) – chehh984

関連する問題