【问题标题】:Create xmlDocument from another document从另一个文档创建 xmlDocument
【发布时间】:2012-10-05 09:22:34
【问题描述】:

我正在尝试通过不同的 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);
 }

【问题讨论】:

    标签: c# xml xmldocument


    【解决方案1】:

    您需要使用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>
    

    与其创建新的 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 设为空
    • 你离得太近了!问题是您已经创建了所有想要的 xml,但还没有将 news 元素附加到输出文档中。请参阅我的更新答案。
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多