2017-09-27 1 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> 

Ich habe die XML-Datei oben, die ich analysieren möchte. Ich habe den folgenden Code geschrieben, um den settings Teil der XML-Datei zu serialisieren. Das ist die einzige Portion, die mir wichtig ist. Wie behandle/verwerfe ich den verbleibenden Teil der XML-Datei? Ich muss die Werte zu einem structure/class extrahieren, der die folgenden Felder enthält. ApplicationId Port Wie extrahiere ich diese Werte aus der Liste der Einstellungsobjekte, die ich habe.zweite Ebene Extraktion aus XML-Datei nach Deserialisierung

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; 
    } 
} 

Antwort

0

XML ist Groß- und Kleinschreibung (siehe setting und Setting). Nach dem Fixieren es (unter der Annahme, Kleinbuchstaben) und unter Berücksichtigung des XML-Namespace, können Sie einfach Linq verwenden, um

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); 

Check it xml:

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

'Einstellungen' zum einschließenden XML-Namespace verweisen, welche enthält ein Liste der 'Einstellung'. Was ist 'yourxmlstring' hier? Ist es die Liste , die von der Funktion Read zurückgegeben wird. – liv2hak

+1

@ Liv2hak ** (a) ** sehen Sie wieder Ihre XML. Ich habe nicht 'Setting ** s ** 'gesagt. ** (b) ** "yourxmlstring" ist das XML, das Sie in Frage gestellt haben. – Eser

Verwandte Themen