从另一个文档创建xmlDocument

9
我正在尝试通过不同的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个回答

12

您需要使用ImportNode方法将第一个文档中的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,news,而是在创建docRSS时,请执行以下操作:

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

你现在拥有一个看起来像这样的XmlDocument:

<news/>

然后,不要使用 news.AppendChild ,而是:

docRSS.DocumentElement.AppendChild(importNewsItem);

这将每个newsItem附加在news元素下面(在此示例中,该元素是文档元素)。


+1,那个方法有效。但是当我使用 docRss.Save(Response.Output); 输出完整文档时,仍然将 docRss 作为空白。 - GajendraSinghParihar
你已经非常接近了!问题在于你已经创建了所有想要的 XML,但是你还没有将新闻元素附加到输出文档中。请查看我的更新答案。 - dash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接