Как скопировать данные из исходного XML в другой XML в той же структуре?
- Привет!
У меня есть XML-файл с определенной структурой, как показано ниже:
<p>This is a paragraph.</p> <p>This is a paragraph.</p> <p>This is a paragraph.</p> <h3>This is a h3 tag.</h3> <p>This is a paragraph.</p> <h4>This is a h4 tag.</p> <h4>This is a h4 tag.</h4> <p>This is a paragraph.</p> <p>This is a paragraph.</p> <h5>This is a h5 tag</h5>
Я хочу, чтобы это было похоже:
<absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a h3 tag.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a h4 tag.</absatz> <absatz>This is a h4 tag.</h4> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a h5 tag</absatz>
Что я получаю:
<absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a paragraph.</absatz> <absatz>This is a h3 tag.</absatz> <absatz>This is a h4 tag.</h4> <absatz>This is a h4 tag.</absatz> <absatz>This is a h5 tag</absatz>
Что я уже пробовал:
//Insert <p> var articlepara = secelement.Elements("p").ToList(); foreach (var para in articlepara) { string paragraphvalue = para.Value; XElement paraelement = new XElement("absatz", paragraphvalue); xedoc.Element("artikel").Element("inhalt").Element("text").Add(paraelement); } //Insert <h3> var hthree = secelement.Elements("h3").ToList(); foreach (var hth in hthree) { string hthreevalue = hth.Value; XElement hthelement = new XElement("absatz", hthreevalue); xedoc.Element("artikel").Element("inhalt").Element("text").Add(hthelement); } //Insert <h4> var hfour = secelement.Elements("h4").ToList(); foreach (var hfo in hfour) { string hfourvalue = hfo.Value; XElement hfoelement = new XElement("absatz", hfourvalue); xedoc.Element("artikel").Element("inhalt").Element("text").Add(hfoelement); } //Insert <h5> var hfive = secelement.Elements("h5").ToList(); foreach (var hfi in hfive) { string hfivevalue = hfi.Value; XElement hfielement = new XElement("absatz", hfivevalue); xedoc.Element("artikel").Element("inhalt").Element("text").Add(hfielement); }
Richard MacCutchan
Используйте свой отладчик, чтобы узнать, что происходит. Вы также можете упростить этот код, создав один метод, который принимает имя тега и преобразует все записи в "absatz". Или принимает два имени тегов и преобразует все записи с первым именем во второе.
Primo Chalice
- Привет!
Что я могу видеть, так это то, что он сначала создает все экземпляры then < h3 > И так далее. Но разве он не должен вставлять, как и когда он нашел соответствующий элемент? Я имею в виду, даже если это чтение файла после первого появления &ЛТ; Н3 &ГТ; должно быть написано в качестве четвертого &ЛТ;к услугам гостей отеля absatz&ГТ;да?
Richard MacCutchan
Сделайте то, что я предложил, и создайте единый метод, который выполняет все преобразования. Проверьте исходный XML-файл, чтобы убедиться, что все теги совпадают. Затем запустите его и посмотрите, что произойдет.
Richard MacCutchan
У вас есть плохо сформированная запись h4 в исходном XML-файле.
Primo Chalice
- Привет!
Извините, это моя ошибка.