2017-09-27 4 views
-1
<?xml version="1.0" encoding="utf-8" standalone="no" ?> 
    <Configuration xmlns="http://test.com/SConfiguration"> 
    <Settings> 
    <setting owner="MyServer" name="AllowEditOnAreas" value="0"/> 
    <setting owner="MyServer" name="ApplicationId" value="10"/> 
    <setting owner="MyServer" name="Port" value="3000"/> 
    </Settings> 
    <PPDUs> 
    <PDU type="1" state="Enabled"/> 
    <PDU type="2" state="Enabled"/> 
    <PDU type="3" state="Enabled"/> 
    </PPDUs> 
    </Configuration> 

私は上記のXMLファイルを解析したいと思います。私はsettings XMLファイルの一部をシリアル化するために以下のコードを書いています。それが私が気にしている唯一の部分です。 XMLファイルの残りの部分を処理/破棄する方法。 次のフィールドを含むstructure/classに値を抽出する必要があります。 AllowEditOnAreas ApplicationId Port 私は設定オブジェクトのリストからこれらの値を抽出する方法を教えてください。デシリアライズ後のxmlファイルからの第2レベル抽出

public class XmlSettingsManger 
{ 
    public class setting 
    { 
     public string owner; 
     public string name; 
     public string value; 

     public setting() 
     { 
      owner = ""; 
      name = ""; 
      value = ""; 
     } 
    } 
    public static List<setting> Read(string path) 
    { 
     List<setting> Settings = new List<setting>(); 
     XmlSerializer serializer = new XmlSerializer(typeof(List<setting>)); 
     XmlReader reader = XmlReader.Create(path); 

     Settings = (List<setting>)serializer.Deserialize(reader); 

     return Settings; 
    } 
} 

答えて

0

XMLは大文字と小文字を区別(settingSettingを参照します)。

foreach(var item in dict) 
{ 
    Console.WriteLine($"{item.Key} : {item.Value}"); 
} 
+0

を 'A含んで囲んでXML名前空間を参照してくださいSettings':(小文字と仮定して)、それを固定し、XML名前空間を考慮した後、あなたは簡単に

XNamespace ns = "http://cubic.com/CatsDISConfiguration"; var dict = XDocument.Parse(yourxmlstring) .Descendants(ns + "setting") .ToDictionary(x => x.Attribute("name").Value, x => x.Attribute("value").Value); 

がそれをチェックXMLへのLINQを使用することができます'設定'のリスト。 'yourxmlstring'とは何ですか?関数Readから返されるリストですか? – liv2hak

+1

@ liv2hak **(a)**あなたのXMLをもう一度見てください。私は 'Setting ** s **'とは言わなかった。 **(b)** 'yourxmlstring'はあなたが投稿したXMLです。 – Eser

関連する問題