[C#] XmlDocument.GetElementById() wirft immer 0 zurück

Henig

Mitglied
Moin Moin vom Roin

Ich hab ein kleines Problem mit meiner XML-Dateil, undzwar will ich mithilfe von CSharp bestimmte Elemente und anschließend deren Childs mithilfe von XML-Document Finden/Auslesen. die XML-Datei sieht so aus:
XML:
<Oberschicht>
          <Mittelschicht>
                    <Unterschicht ElementID="1">
                              <Farbe>
                                        <Gesund>Grün</Gesund>
                                        <Krank>Braun</Krank>
                                        <Neugeboren>Rosa</Geboren>
                              </Farbe>
                    </Unterschicht>
                    <Unterschicht ElementID="2">
                               <Farbe>
                                         <Gesund>Hellblau</Gesund>
                                         <Krank>EherPink</Krank>
                                         <Beugeboren>Transparent</Neugeboren>
                                </Farbe>
                    </Unterschicht>
          </Mittelschicht> 
</Oberschicht>

Jetzt versuche ich mithilfe von der XmlDocument Klasse alle IDs in einem StringArray zu speichern (Klappt wunderproppig). Jetzt wo ich alle 2 IDs in dem Array gespeichert habe, will ich die GetElementById-Funktion benutzten um die Unterschichten einzeln aufzurufen.
Soll so aussehen:
C#:
int ergNr = 0;
while (ergNr != idErg.Length)
{
XmlDocument doc = new XmlDocument();
doc.Load(pfad);
XmlElement idRoot = doc.DocumentElement;
idRoot = doc.GetElementById(idSchicht[ergNr]); /*idSchicht ist das Stringarray, in dem Folgendes drin steht: idSchicht["1","2"]*/

     if (idRoot != null)
     {
                textBox1.Text = "ID gefunden";
      }
      ergNr = ergNr + 1;
}

wieso bleibt das XmlElement idRoot jetzt trotzdem null?
hab cih vergessen was anzugeben?

Gruß =)
 
Zuletzt bearbeitet von einem Moderator:

Turri

Erfahrenes Mitglied
Hallo,

ich vermute die "GetElementById()"-Funktion sucht nach "ID" und nicht nach "ElementID".
Deswegen findet sie das Element nicht.

Habs aber nicht ausprobiert... nur eine Vermutung.

Edit: Verdammt, MCoder war schneller ;)
 

Henig

Mitglied
Andere frage zum selben Thema...
Kann ich innerhalb Meine Programmierung nciht festlegen das ElementID als ID behandelt werden soll, ohne dabei die Datei zu Ändern? Ich analysiere sie ja nur und will sie ja nicht geändert abspeichern ;)

und erstmal danke für die Antworten =)
Leider habe ich das nicht definiert ich hab die XML so in der art vorgelegt bekommen und muss damit arbeiten
 
Zuletzt bearbeitet:

Henig

Mitglied
Nochmal anders... was noch eifnacher wäre WIE kann ich denn mithilfe von XmlDocument einem XmlNode ein Element mit einem Betimmtem Attribut mit bestimmten Inhalt zuweisen?
Also fast ne SQL abfrage in der ich sage:
SQL:
SELECT tag WHERE attribut ElementID = 1

edit: Ich habe grade den Geistesblitz bekommen das ganze doch i.-wie mit XPath zu machen nur ist die Frage, wie ich das Attribut auf die ID festlegen kann...

//Unterschicht[@ElementID = 1]/Farbe/Gesund

was ist falsch an diesem XPath wie kann ich bei dem Element die ID mit angeben

hilfe! =(
 
Zuletzt bearbeitet von einem Moderator:

Turri

Erfahrenes Mitglied
Hi,

Hast du Visual Studio 2008 oder höher?
Dann google mal nach "Linq to XML".
Da kannst du SQL ähnliche Syntax für dein Problem verwenden.
 

MCoder

Erfahrenes Mitglied
Probier's mal mit einem XPath und SelectSingleNode:
C#:
XmlNode node = doc.SelectSingleNode("//Unterschicht[@ElementID='1']");
Gruß
MCoder
 

Henig

Mitglied
Nope ich arbeite mit VS 2005

Aber danke für die Info ;D

Ich bhin grad mal mega geil drauf weil ichs jetzt genauso hinbekommen habe wie ich wollte:

C#:
int ergNr = 0;
while (ergNr != idErg.Length)
{
XmlDocument doc = new XmlDocument();
doc.Load(pfad);
XmlElement idRoot = doc.DocumentElement;
idRoot = doc.GetElementById(idSchicht[ergNr]); /*idSchicht ist das Stringarray, in dem Folgendes drin steht: idSchicht["1","2"]*/
XmlNode node = idRoot.SelectSingleNode("//UnterSchicht[@'"+idSchicht[ergNr]+"']/Farbe/Gesund");
     if (idRoot != null)
     {
                textBox1.Text = node.InnerXml;
     }
     ergNr = ergNr + 1;
}

Jetzt sucht der einmal exakt für ID1 und das andere mal für die ID2 raus und wenn ich es umkehre findet er die Werte auch andersherum =)

Danke euch 2n ihr habt mir gute denkanstöße verpasst =)

Edit : Danke sehr MCoder aber ganz kurz bevor du das geschrieben ahst bin cih selber drauf gekommen ;D

Edit 2 : Sry @Turri (#9) ich bin nicht der Xml-Schreiber eher der Analysiere :p

///// Closed
 
Zuletzt bearbeitet:

Turri

Erfahrenes Mitglied
Hallo,

@Henig
Ich hab eben mal versucht deine XML Datei zu laden.
Klappt nicht, weil die ElementID in Anführungszeichen stehen muss.
Funktioniert das Load bei dir mit dem gezeigten Inhalt?