Benutzer mit den meisten Antworten
XML Abfrage: nur bestimmte Nodes zurückgeben als nodelist

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
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- Als Antwort markiert Migration Sucks Samstag, 20. Februar 2016 19:49
-
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- Als Antwort markiert Migration Sucks Samstag, 20. Februar 2016 19:49
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- Als Antwort markiert Migration Sucks Samstag, 20. Februar 2016 19:49
-
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- Als Antwort markiert Migration Sucks Samstag, 20. Februar 2016 19:49
-
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!