xdocument tutorial query net manejo leer example ejemplos c# .net linq linq-to-xml

c# - tutorial - Cambiar el orden de XML usando XDocument



system xml linq example c# (4)

Esto debería funcionar. Ordena los nodos secundarios de la raíz en función de su contenido y luego cambia su orden en el documento. Es probable que esta no sea la forma más efectiva, pero a juzgar por sus etiquetas, quería verla con LINQ.

static void Main(string[] args) { XDocument doc = new XDocument( new XElement("root", new XElement("one", 1), new XElement("two", 2) )); var results = from XElement el in doc.Element("root").Descendants() orderby el.Value descending select el; foreach (var item in results) Console.WriteLine(item); doc.Root.ReplaceAll( results.ToArray()); Console.WriteLine(doc); Console.ReadKey(); }

Quiero cambiar el orden de XML usando XDocument

<root> <one>1</one> <two>2</two> </root>

Quiero cambiar el orden para que 2 aparezca antes 1. ¿Se ha incorporado esta capacidad o tengo que hacerlo yo mismo? Por ejemplo, eliminar entonces AddBeforeSelf ()?

Gracias


Aparte de escribir el código C # para lograr esto, puede usar XSLT para transformar el XML.


Similar a la anterior, pero envolviéndolo en un método de extensión. En mi caso, esto funciona bien para mí, ya que solo quiero asegurar que se aplique un cierto orden de elementos en mi documento antes de que el usuario guarde el xml.

public static class XElementExtensions { public static void OrderElements(this XElement parent, params string[] orderedLocalNames) { List<string> order = new List<string>(orderedLocalNames); var orderedNodes = parent.Elements().OrderBy(e => order.IndexOf(e.Name.LocalName) >= 0? order.IndexOf(e.Name.LocalName): Int32.MaxValue); parent.ReplaceNodes(orderedNodes); } } // using the extension method before persisting xml this.Root.Element("parentNode").OrderElements("one", "two", "three", "four");


Prueba esta solución ...

XElement node = ...get the element... //Move up if (node.PreviousNode != null) { node.PreviousNode.AddBeforeSelf(node); node.Remove(); } //Move down if (node.NextNode != null) { node.NextNode.AddAfterSelf(node); node.Remove(); }