从另一个文档创建xmlDocument

时间:2012-10-15 11:47:50

标签: c# xml xmldocument

我正在尝试用不同的XML

创建一个xmldocument对象

请参阅以下代码:

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 个答案:

答案 0 :(得分:10)

您需要使用Import Node方法将第一个文档中的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>

在创建docRSS时,不要创建新的XmlElement新闻,而是执行以下操作:

XmlDocument docRss = new XmlDocument();
docRss.LoadXml("<news/>");

现在你有一个如下所示的XmlDocument:

<news/>

然后,而不是news.AppendChild,只需:

docRSS.DocumentElement.AppendChild(importNewsItem);

这会在newsItem元素(在此示例中为文档元素)下追加每个news