Laden...

XML Attribut (mit wenig Code) auslesen

Erstellt von Luna1987 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.199 Views
L
Luna1987 Themenstarter:in
43 Beiträge seit 2009
vor 14 Jahren
XML Attribut (mit wenig Code) auslesen

Hallo @ all.
Ich bin gerade dabei ein XML Dokument zu laden und dort ein bestimmtes Attribute in eine Variable zu speichern.

Die Struktur des XML Dokumentes sieht folgendermaßen aus:

<eModel:Space>
_______<eModel:Units>
_______<eModel:Resources>
_____________<eModel:GraphicResource>
____________________<eModel:Properties id="xxx">
...

Über lauter foreach und if Schleifen bekomme ich dieses Attribut auch ausgelesen. Hier mal der Code:

 
XmlDocument descriptor = new XmlDocument();
descriptor.Load(mainFolder + @"\descriptor.xml");
string id = "";

XmlNode rootDescriptor = descriptor.DocumentElement;
foreach (XmlNode nodeDescriptor in rootDescriptor.ChildNodes) {
     if (nodeDescriptor.Name == "eModel:Resources") {
          foreach (XmlNode node2Descriptor in nodeDescriptor.ChildNodes) {
               if (node2Descriptor.Name == "eModel:GraphicResource") {
                    foreach (XmlNode node3Descriptor in node2Descriptor.ChildNodes) {
                         if (node3Descriptor.Name == "eModel:Properties") {
                                    id = node3Descriptor.Attributes["id"].InnerText;
                                }
                            }...

Das ist natürlich total unübersichtlich 😦 Ich habe bereits eine einfachere Variante gesehen, nämlich mittels "SelectSingleNode". Das hatte ich folgendermaßen probiert:


XmlDocument descriptor = new XmlDocument();
descriptor.Load(mainFolder + @"\descriptor.xml");

XmlNode properties = descriptor.SelectSingleNode("/eModel:Space/eModel:Resources/eModel:GraphicResources/eModel:Properties");
string id = properties.Attribute["id"].InnerText;
MessageBox.Show(id);

Aber ich erhalte immer eine Fehlermeldung: "XPathException wurde nicht behandelt" 😦

Was mache ich falsch? Ist sicherlich nur ein kleiner Fehler?!?! Wäre schön, wenn jemadn helfen könnte. Das andere funktioniert ja auch, aber ist halt deutlich mehr Code!!!
Danke im Vorraus.
Lg Luna

T
94 Beiträge seit 2007
vor 14 Jahren

Dir fehlt wahrscheinlich der XmlNamespace, da dein XML-File ja einen verwendet. Versuch mal folgendes:


XmlNamespaceManager man = new XmlNamespaceManager(new NameTable());
man.AddNamespace("eModel", "DWF-eModel:1.0");

XmlNode properties = descriptor.SelectSingleNode("eModel:Space/eModel:Resources/eModel:GraphicResources/eModel:Properties", man);

Oder aber den Namespace aus dem XML-File entfernen und den Code entsprechend anpassen.

456 Beiträge seit 2007
vor 14 Jahren

Quick-and-dirty:


String id = XElement.Parse(File.ReadAllText(FULL_QUALIFIED_XML_PATH)).
            Descendants(XNamespace.Get("DWF-eModel:1.0") + "Properties").First().Attribute("id").Value;

L
Luna1987 Themenstarter:in
43 Beiträge seit 2009
vor 14 Jahren

Tut mir leid, dass ich jetzt erst antworte, aber hatte total vergesse mal zu gucken ob Antworten da sind 😉
Danke für eure Hilfe!!! Hat geklappt 🙂