2012-10-15 13 views
7

Sto cercando di creare un oggetto xmldocument da un XML diversoCrea xmlDocument da un altro documento

vedere il codice qui sotto:

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 

Errore: Il nodo da inserire è da un contesto altro documento

Modifica 1 compleate blocco di codice:

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); 
} 

risposta

10

è necessario utilizzare il metodo Import Node per importare il XmlNode dal primo documento nel contesto della seconda:

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); 

EDIT

Vi sono molto vicino alla tua risposta, il il problema principale che hai ora è che devi aggiungere l'elemento news al tuo documento principale. Suggerirei di fare quanto segue se si desidera che il documento di output a guardare come questo:

<news> 
    <newsItem>...</newsItem> 
    <newsItem>...</newsItem> 
</news> 

Piuttosto che creare un nuovo XmlElement, notizie, invece, quando si crea docRSS, effettuare le seguenti operazioni:

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

ora avete un XmlDocument che assomiglia a questo:

<news/> 

Quindi, piuttosto che news.AppendChild, semplicemente:

docRSS.DocumentElement.AppendChild(importNewsItem); 

Questo accoda ogni newsItem sotto l'elemento news (che in questo caso è l'elemento del documento).

+0

+1 che ha funzionato. ma sto ancora ottenendo docRss come vuoto quando uso il 'docRss.Save (Response.Output);' per emettere il doceato completo – Champ

+0

Ho aggiunto il blocco di codice completo, per favore aiutatemi? – Champ

+0

Sei così vicino! Il problema è che hai creato tutto l'xml che desideri, ma non hai aggiunto l'elemento news al tuo documento di output. Vedi la mia risposta aggiornata. – dash

Problemi correlati