code_junkie

Change order of XML using XDocument

Nov 11th, 2011
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. <root>
  2. <one>1</one>
  3. <two>2</two>
  4. </root>
  5.  
  6. public static class XElementExtensions
  7. {
  8. public static void OrderElements(this XElement parent, params string[] orderedLocalNames)
  9. {
  10. List<string> order = new List<string>(orderedLocalNames);
  11. var orderedNodes = parent.Elements().OrderBy(e => order.IndexOf(e.Name.LocalName) >= 0? order.IndexOf(e.Name.LocalName): Int32.MaxValue);
  12. parent.ReplaceNodes(orderedNodes);
  13. }
  14. }
  15. // using the extension method before persisting xml
  16. this.Root.Element("parentNode").OrderElements("one", "two", "three", "four");
  17.  
  18. static void Main(string[] args)
  19. {
  20. XDocument doc = new XDocument(
  21. new XElement("root",
  22. new XElement("one", 1),
  23. new XElement("two", 2)
  24. ));
  25.  
  26. var results = from XElement el in doc.Element("root").Descendants()
  27. orderby el.Value descending
  28. select el;
  29.  
  30. foreach (var item in results)
  31. Console.WriteLine(item);
  32.  
  33. doc.Root.ReplaceAll( results.ToArray());
  34.  
  35. Console.WriteLine(doc);
  36.  
  37. Console.ReadKey();
  38. }
  39.  
  40. XElement node = ...get the element...
  41.  
  42. //Move up
  43. if (node.PreviousNode != null) {
  44. node.PreviousNode.AddBeforeSelf(node);
  45. node.Remove();
  46. }
  47.  
  48. //Move down
  49. if (node.NextNode != null) {
  50. node.NextNode.AddAfterSelf(node);
  51. node.Remove();
  52. }
Add Comment
Please, Sign In to add comment