Создание xmlDocument из другого документа
Я пытаюсь создать xmldocument
объект другим XML
посмотреть код ниже:
objNewsDoc.LoadXml(strNewsDetail); // Current XML
XmlDocument docRss = new XmlDocument(); // new Xml Object i Want to create
XmlElement news = docRss.CreateElement("news"); // creating the wrapper news node
news.AppendChild(objNewsDoc.SelectSingleNode("newsItem")); // adding the news item from old doc
ошибка: узел, который будет вставлен из другого контекста документа
редактировать 1 полный блок кода:
try
{
XmlDocument objNewsDoc = new XmlDocument();
string strNewsXml = getNewsXml();
objNewsDoc.LoadXml(strNewsXml);
var nodeNewsList = objNewsDoc.SelectNodes("news/newsListItem");
XmlElement news = docRss.CreateElement("news");
foreach (XmlNode objNewsNode in nodeNewsList)
{
string newshref = objNewsNode.Attributes["href"].Value;
string strNewsDetail = getNewsDetailXml(newshref);
try
{
objNewsDoc.LoadXml(strNewsDetail);
XmlNode importNewsItem = docRss.ImportNode(objNewsDoc.SelectSingleNode("newsItem"), true);
news.AppendChild(importNewsItem);
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
}
docRss.Save(Response.Output);
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
1 ответов
вам нужно использовать Узел Импорт метод для импорта XmlNode из первого документа в контекст второго:
objNewsDoc.LoadXml(strNewsDetail); // Current XML
XmlDocument docRss = new XmlDocument(); // new Xml Object i Want to create
XmlElement news = docRss.CreateElement("news"); // creating the wrapper news node
//Import the node into the context of the new document. NB the second argument = true imports all children of the node, too
XmlNode importNewsItem = docRss.ImportNode(objNewsDoc.SelectSingleNode("newsItem"), true);
news.AppendChild(importNewsItem);
редактировать
вы очень близки к своему ответу, основная проблема у вас сейчас заключается в том, что вам нужно добавить свой элемент новостей в основной документ. Я бы рекомендовал сделать следующее, Если вы хотите, чтобы ваш выходной документ выглядел следующим образом:
<news>
<newsItem>...</newsItem>
<newsItem>...</newsItem>
</news>
вместо создания нового XmlElement, новости, вместо этого, при создании docRSS, сделайте следующее:
XmlDocument docRss = new XmlDocument();
docRss.LoadXml("<news/>");
теперь у вас есть XmlDocument, который выглядит так:
<news/>
, а не news.AppendChild
просто:
docRSS.DocumentElement.AppendChild(importNewsItem);
это добавляет каждый элемент newsItem
под news
элемент (который в данном случае является элемент документа).