none
XML Abfrage: nur bestimmte Nodes zurückgeben als nodelist RRS feed

  • Frage

  • Moin, folgende test-datei:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Root>
    
       <Wert>A</Wert>
        <Attrib attribut="myatt" />
        <Leerwert/>
    
        <Ebene1>
          <Wert1>Nur ein wert in der Ebene1</Wert1>
        </Ebene1>
    
        <Ebene1>
          <Wert1>B</Wert1>
          <Ebene2>
              <Wert2>C</Wert2>
              <Ebene3>
                <Wert3>D</Wert3>
             </Ebene3>
          </Ebene2>
        </Ebene1>
        
    </Root>

    Ich möchte nun eine nodelist haben, in der nur die nodes drin sind, die kein child haben (attrib und Leerwert) oder als einziges child nur eine Element mit nodetype text (Wert A)

    Ich kann alle Knoten in der 1. Ebene über eine Schleife
    For Each xnode In xdoc.SelectNodes("/*/child::*")

    finden und nach ihren Eigenschaften dann herausfiltern, aber ich kann sie nicht einer neuen nodelist hinzufügen. Und wenn ich die anderen/nichtzutreffenden aus der nodelist entferne, dann entferne ich ja die nodes aus dem xmlDocument.

    Wie krieg ich denn sowas hin?

    Gruß und Dank TH

    Samstag, 20. Februar 2016 17:46

Antworten

Alle Antworten

  • Hallo,

    warum willst du unbedingt eine NodeList haben? Für die meisten Fälle reicht doch auch eine normale List<XmlNode>.

    Ansonsten steht es dir frei eine eigene Klasse von XmlNodeList abzuleiten und diese zu verwenden.

    Eine Idee wie man das sonst umsetzen könnte (also per XPath o.ä.) habe ich auch nicht.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 20. Februar 2016 18:59
    Moderator
  • Hi Lutscher,
    ich weiß zwar nicht, was Du mit notetype text meinst, aber vielleicht hilft Dir das:

      Public Sub Main()
        Dim xe0 As XElement = <Root>
                                <Wert>A</Wert>
                                <Attrib attribut="myatt"/>
                                <Leerwert/>
                                <Ebene1>
                                  <Wert1>Nur ein wert in der Ebene1</Wert1>
                                </Ebene1>
                                <Ebene1>
                                  <Wert1>B</Wert1>
                                  <Ebene2>
                                    <Wert2>C</Wert2>
                                    <Ebene3>
                                      <Wert3>D</Wert3>
                                    </Ebene3>
                                  </Ebene2>
                                </Ebene1>
                              </Root>
        Dim liste = (From n0 In xe0.Descendants Where n0.Descendants.Count = 0).ToList
        For Each n1 In liste
          Console.WriteLine(n1.Name)
        Next
        Console.ReadKey()
      End Sub


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Samstag, 20. Februar 2016 19:15
  • warum willst du unbedingt eine NodeList haben? Für die meisten Fälle reicht doch auch eine normale List<XmlNode>.

    Ah, klar! Da hab ich gar nicht drangedacht! (Ich schreib mir grad ne Klasse für schnelle Verwaltung von xml-Ini-Dateien, da gibts viele Funktionen, die mir nodelists zurückgeben, je nach Suchwunsch. Aber mit List of xmlnode geht das auch, und hier sogar besser.)

    Vielen Dank!

    Samstag, 20. Februar 2016 19:47
  • Hi Lutscher,

    Vielen Dank, Metzger, das kuck ich mir noch genauer an.

    ;-)

    Samstag, 20. Februar 2016 19:49