Копирование элементов из одного XML в новый XML - C#
Формулировка задачи:
Доброго всем времени суток.
На входе имеется XML файл со сложной структурой:
Задача состоит в том, чтобы создать новый файл XML со структурой:
читаю исходный файл:
создаю экземпляр нового документа, в который должны записываться данные:
делаю проход по документу с условием:
вылетает с ошибкой.
Суть задачи: перенести содержимое всех узлов TableElement в новый файл с сохранением структуры внутри TableElement.
Пересерчил множества подмножеств, но ничего не нашел. Хотя решение, как мне кажется лежит на поверхности.
Помогите, пожалуйста.
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Row>
<Page>
<Row>
<TableElement>
<Columns>
<Column />
<Column />
<Column />
<Column />
<Column />
<Column />
</Columns>
<Row>
<TableElement>
<Row>
<Cell>
<Text>1.1 </Text>
</Cell>
<Cell>
<Text>1.2 </Text>
</Cell>
<Cell>
<Text>1.3 </Text>
</Cell>
<Cell>
<Text>1.4 </Text>
</Cell>
<Cell>
<Text>1.5 </Text>
</Cell>
<Cell>
<Text>1.6 </Text>
</Cell>
</Row>
</TableElement>
<TableElement>
<Row>
<Cell>
<Text>2.1</Text>
</Cell>
<Cell>
<Text>2.2 </Text>
</Cell>
<Cell>
<Text>2.3</Text>
</Cell>
<Cell>
<Text>2.4</Text>
</Cell>
<Cell>
<Text>2.5 </Text>
</Cell>
<Cell>
<Text>2.6</Text>
</Cell>
</Row>
</TableElement>
</Row>
</TableElement>
</Row>
</Page>
</Row>
</Document>
<?xml version="1.0" encoding="utf-8"?>
<Document>
<TableElement>
<Row>
<Cell>
<Text>1.1 </Text>
</Cell>
<Cell>
<Text>1.2 </Text>
</Cell>
<Cell>
<Text>1.3 </Text>
</Cell>
<Cell>
<Text>1.4 </Text>
</Cell>
<Cell>
<Text>1.5 </Text>
</Cell>
<Cell>
<Text>1.6 </Text>
</Cell>
</Row>
</TableElement>
<TableElement>
<Row>
<Cell>
<Text>2.1</Text>
</Cell>
<Cell>
<Text>2.2 </Text>
</Cell>
<Cell>
<Text>2.3</Text>
</Cell>
<Cell>
<Text>2.4</Text>
</Cell>
<Cell>
<Text>2.5 </Text>
</Cell>
<Cell>
<Text>2.6</Text>
</Cell>
</Row>
</TableElement>
</Document>
xdoc = XDocument.Load(filename);
XDocument newXDoc = new XDocument();
foreach (XElement elm in xdoc.Descendants())
{
if ((elm.Name.ToString() == "TableElement")&&(elm.Parent.Name.ToString() == "Row"))
{
newXDoc.Add(new XElement(elm));
}
}Решение задачи: «Копирование элементов из одного XML в новый XML»
textual
Листинг программы
var xdoc = XDocument.Load(filepath);
XDocument newXDoc = new XDocument();
var elem = new XElement("Document");//создаём корневой элемент
foreach (XElement elm in xdoc.Descendants())
{
if ((elm.Name.ToString() == "TableElement") && (elm.Parent.Name.ToString() == "Row"))
{
elem.Add(new XElement(elm)); // добавляем в корневой, а не в документ!!!
}
}
newXDoc.Add(elem);// помещаем заполненный корневой в документ
newXDoc.Save(filepathToSave);