Копирование элементов из одного XML в новый XML - C#

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток. На входе имеется XML файл со сложной структурой:
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Document>
  3. <Row>
  4. <Page>
  5. <Row>
  6. <TableElement>
  7. <Columns>
  8. <Column />
  9. <Column />
  10. <Column />
  11. <Column />
  12. <Column />
  13. <Column />
  14. </Columns>
  15. <Row>
  16. <TableElement>
  17. <Row>
  18. <Cell>
  19. <Text>1.1 </Text>
  20. </Cell>
  21. <Cell>
  22. <Text>1.2 </Text>
  23. </Cell>
  24. <Cell>
  25. <Text>1.3 </Text>
  26. </Cell>
  27. <Cell>
  28. <Text>1.4 </Text>
  29. </Cell>
  30. <Cell>
  31. <Text>1.5 </Text>
  32. </Cell>
  33. <Cell>
  34. <Text>1.6 </Text>
  35. </Cell>
  36. </Row>
  37. </TableElement>
  38. <TableElement>
  39. <Row>
  40. <Cell>
  41. <Text>2.1</Text>
  42. </Cell>
  43. <Cell>
  44. <Text>2.2 </Text>
  45. </Cell>
  46. <Cell>
  47. <Text>2.3</Text>
  48. </Cell>
  49. <Cell>
  50. <Text>2.4</Text>
  51. </Cell>
  52. <Cell>
  53. <Text>2.5 </Text>
  54. </Cell>
  55. <Cell>
  56. <Text>2.6</Text>
  57. </Cell>
  58. </Row>
  59. </TableElement>
  60. </Row>
  61. </TableElement>
  62. </Row>
  63. </Page>
  64. </Row>
  65. </Document>
Задача состоит в том, чтобы создать новый файл XML со структурой:
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Document>
  3. <TableElement>
  4. <Row>
  5. <Cell>
  6. <Text>1.1 </Text>
  7. </Cell>
  8. <Cell>
  9. <Text>1.2 </Text>
  10. </Cell>
  11. <Cell>
  12. <Text>1.3 </Text>
  13. </Cell>
  14. <Cell>
  15. <Text>1.4 </Text>
  16. </Cell>
  17. <Cell>
  18. <Text>1.5 </Text>
  19. </Cell>
  20. <Cell>
  21. <Text>1.6 </Text>
  22. </Cell>
  23. </Row>
  24. </TableElement>
  25. <TableElement>
  26. <Row>
  27. <Cell>
  28. <Text>2.1</Text>
  29. </Cell>
  30. <Cell>
  31. <Text>2.2 </Text>
  32. </Cell>
  33. <Cell>
  34. <Text>2.3</Text>
  35. </Cell>
  36. <Cell>
  37. <Text>2.4</Text>
  38. </Cell>
  39. <Cell>
  40. <Text>2.5 </Text>
  41. </Cell>
  42. <Cell>
  43. <Text>2.6</Text>
  44. </Cell>
  45. </Row>
  46. </TableElement>
  47. </Document>
читаю исходный файл:
Листинг программы
  1. xdoc = XDocument.Load(filename);
создаю экземпляр нового документа, в который должны записываться данные:
Листинг программы
  1. XDocument newXDoc = new XDocument();
делаю проход по документу с условием:
Листинг программы
  1. foreach (XElement elm in xdoc.Descendants())
  2. {
  3. if ((elm.Name.ToString() == "TableElement")&&(elm.Parent.Name.ToString() == "Row"))
  4. {
  5. newXDoc.Add(new XElement(elm));
  6. }
  7. }
вылетает с ошибкой. Суть задачи: перенести содержимое всех узлов TableElement в новый файл с сохранением структуры внутри TableElement. Пересерчил множества подмножеств, но ничего не нашел. Хотя решение, как мне кажется лежит на поверхности. Помогите, пожалуйста.

Решение задачи: «Копирование элементов из одного XML в новый XML»

textual
Листинг программы
  1. var xdoc = XDocument.Load(filepath);
  2.             XDocument newXDoc = new XDocument();
  3.             var elem = new XElement("Document");//создаём корневой элемент
  4.             foreach (XElement elm in xdoc.Descendants())
  5.             {
  6.                 if ((elm.Name.ToString() == "TableElement") && (elm.Parent.Name.ToString() == "Row"))
  7.                 {
  8.                     elem.Add(new XElement(elm)); // добавляем в корневой, а не в документ!!!
  9.                 }
  10.             }
  11.             newXDoc.Add(elem);// помещаем заполненный корневой в документ
  12.             newXDoc.Save(filepathToSave);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы