Laden...

LINQ: XElemente in XComment "umwandeln"?

Erstellt von Luna1987 vor 13 Jahren Letzter Beitrag vor 13 Jahren 842 Views
L
Luna1987 Themenstarter:in
43 Beiträge seit 2009
vor 13 Jahren
LINQ: XElemente in XComment "umwandeln"?

verwendetes Datenbanksystem: <bitte immer angeben>

Hallo 😃
Ich habe eine xaml-Datei, die ich öffne. Anschließend sollen einige Elemente auskommentieren werden. Ich benutze dafür LINQ.

Vorher:


<root>
      <child1 name="Child1" />
      <child2 name="Child2" />
      <child3 name="Child3" />
</root>

Nachher:


<root>
      <!--<child1 name="Child1" />-->
      <child2 name="Child2" />
      <child3 name="Child3" />
</root>

Aber das ist irgendwie nicht möglich!?
Habe es mit z.B.


element.DescendantNodesAndSelf().Cast<XComment>();

probiert.

Habt ihr einen Tipp wie ich das am besten anstelle?

L
27 Beiträge seit 2011
vor 13 Jahren

Hallo,
interessante Idee, zu casten. Geht aber nicht, außer du implementierst das als Extension Method oder so.
Die Denkweise ist so:
du holst dir einen Verweis auf das betroffene XElement,
fügst (z.B. davor) ein neues Kommentarelement XComment ein (mit entsprechendem Inhalt)
dann löscht du das betroffene Element

Der neue Dom-Baum sieht wie gewünscht aus...

T
156 Beiträge seit 2010
vor 13 Jahren

Hallo,

in etwa so:


foreach (var node in doc.Root.DescendantNodes().ToArray())
{  
    node.ReplaceWith(new XComment(node.ToString()));
}

LG, Marko

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

Danke für eure Antworten 👍

Die ReplaceWith-Methode hatte ich auch schon probiert, aber nicht so wie du es geschrieben hast 😉

Nun geht es aber!

DANKE 😁

D
500 Beiträge seit 2007
vor 13 Jahren

Hallo!

Auch wenn Du schon eine Loesung besitzt, folgende Anmerkung habe ich noch:

element.DescendantNodesAndSelf().Cast<XComment>();

Nette Idee, aber so wie ich es verstanden habe, machst Du keinen Cast, sondern fuehrst eine Konvertierung durch, weshalb der oben aufgefuehrte Versuch auch nicht funktioniert hat. Du solltest Folgendes schreiben koennen:


var comments = element.DescendantNodesAndSelf().Select<XNode>(node => new XComment(node.ToString());

Gruss,
Moe