[XML] Alle Elemente auf einer Ebene holen und nicht auf tieferen.



  • Hi,

    ich habe ein kleines Problem mit GetElementsByTagName. Wenn ich diese Methode aufrufe, bekomm ich alle Elemente mit dem passenden Namen - schön und gut, doch das möchte ich nicht.

    Die Funktion geht selbst in die Childs, ich benötigte aber nur die aus meiner aktuellen Ebene und nicht die der tieferen Ebenen.

    Hier ein Beispiel:

    program.cs

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main (string[] args)
            {
                XmlDocument document = new XmlDocument ();
                document.Load ("test.xml");
    
                // <root>
                XmlElement root = document.DocumentElement;
    
                // foobar aus <root> lesen
                XmlNodeList list = root.GetElementsByTagName ("foobar");
    
                // Soll 1 sein, ist aber 3!
                Console.WriteLine ("Anzahl foobar-Elemente in Ebene 'root': {0}", list.Count);
        }
    }
    

    test.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
     <!-- nur dieses foobar soll beachtet werden, da es in der Ebene "root" ist. -->
     <foobar>
      <value>111</value> 
     </foobar>
     <somethingelse>
      <foobars>
       <!-- diese foobars sollen nicht beachtet werden, da sie in der Ebene "foobars" sind. -->
       <foobar>
        <value>222</value>
       </foobar>
       <foobar>
        <value>333</value>
       </foobar>
      </foobars>
     </somethingelse>
    </root>
    

    Ich hab mal in der MSDN gestöbert, doch keine passende Methode für dieses Vorhaben gefunden.

    Ich hoffe mir kann hiermit jemand helfen. 🙂

    Danke im voraus und viele freundliche Grüße an euch!



  • .GetElementsByTagName
    durchsucht nunmal alle Unterlemente.
    Also wird dir nix anderes übrig bleiben als
    - die Nodelist zu durchlaufen und den Parent des jeweiligen nodes zu überprüfen 8ob es der richtige ist)
    - oder anstelle von .GetElementsByTagName nur die direkten subNodex deines Knotens durchzulaufen und die Liste quasi von hand zu erstellen



  • root.SelectNodes("foobar");
    

    oder

    document.SelectNodes("root/foobar");
    

    Umfangreiche Dokumentation von XPath findet man in der MSDN


Anmelden zum Antworten