Прежде всего: мне нужно написать заголовок документа XML, затем извлечь некоторые элементы из существующего файла XML и поместить их в заголовок моего документа.
Наконец, мне нужно проанализировать некоторые объекты в одном файле.Получающийся файл должен соответствовать определенной схеме, поскольку он должен быть импортирован программой.
Пока я надеюсь, что это понятно.
Моя проблема с этим:
IВы написали заголовок моего документа и извлекли элементы второго документа.Но мне не удается записать их в мой заголовочный файл, не получив несколько ошибок при попытке загрузить их снова.
Как я уже говорил сверху: мне нужны точно такие же теги, которые я извлек из этого.второй файл, без c # вставляя некоторые дополнительные функции, такие как тег объявления.
В соответствии с просьбой на странице «Как спросить», я попытаюсь повторить все, что я пытался сделать эторабота.
Так что теперь для моей истории сбоев;) Код ниже - тот, который я закончил после 2 дней попытки.Я пробовал некоторые раньше, но этот, вероятно, самый «работающий»:
XElement rootElement = XElement.Load(@filepath);
FileStream fs = new FileStream(@Savepath, FileMode.Append);
IEnumerable<XElement> elements = rootElement.Descendants("Extract1");
foreach (XElement item in elements)
{
Console.WriteLine(item);
item.Save(fs);
}
IEnumerable<XElement> elements2 = rootElement.Descendants("Extract2");
foreach (XElement item in elements2)
{
Console.WriteLine(item);
item.Save(fs);
}
fs.Close();
Вывод на консоль выглядит так:
<Extract1>
<childnodes />
</Extract1>
<Extract2>
<childnodes />
</Extract2>
И это именно то, что я хочу в моем файлетак что я не выбрал неправильные узлы.Но при сохранении в файл появляется волшебный тег объявления, и Xml выглядит так, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?>
<Extract1>
<childnodes />
</Extract1><?xml version="1.0" encoding="UTF-8"?>
<Extract2>
<childnodes />
</Extract2>
Так что я не могу снова прочитать файлы.
Я тоже пытался с
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
.Это убивает тег объявления, но я все еще не могу прочитать файл, потому что теперь этот раздел «забивает» ошибку.
<Extract1>
<childnodes />
</Extract1><Extract2>
Последнее, что я попробовал, - это запись извлеченных элементов в List listX и сериализация.с кодом ниже
XmlSerializer serializer = new XmlSerializer(typeof(List<XElement>));
TextWriter textWriter = new StreamWriter(@savepath);
serializer.Serialize(textWriter, listX);
textWriter.Close();
но теперь я получаю эти
<ArrayOfXElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<XElement>
Подводя итог моей проблеме: есть ли способ прочитать эти узлы и "вставить" ихв другой файл, без добавления дополнительных тегов?
Кстати, я думал о том, чтобы сохранить исходный файл XML и просто удалить все узлы, которые мне не нужны, но сначала это может занять много времени, так как этиэто довольно большие XML-файлы, и, во-вторых, они частично генерируются автоматически, поэтому у меня нет каждого имени.