Click here to Skip to main content
15,892,005 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hi!
I have a problem with writing to an XML file. When i run my program, the c# give me an exception: "The node to be inserted is from a different document context.". I looked a bit on the exception and I found the answers , that this is happening when we write from one document to another. But i dont write from one to another, but I write from the object to xml file. This is the code where the program shows me exception:

C#
private XmlDocument novDokument = new XmlDocument();

public void zapisiArtikleKiSoNaZalogiVnewDoc(string vhodna, string izhodna)
{
    int i = 1;

    newDoc.AppendChild(newDoc.CreateXmlDeclaration(new Version(1, 0).ToString(), Encoding.UTF8.BodyName, string.Empty));
    XmlElement novSeznamArtikel = newDoc.CreateElement("seznamArtiklov");

    foreach (Artikel a in seznamPrebranihArtiklov)
    {
        if (Convert.ToInt16(a.zalogaA) > 0)
        {
            XmlElement novArtikel = newDoc.CreateElement("artikel");
            novArtikel.SetAttribute("id", i.ToString());

            XmlElement novNaziv = newDoc.CreateElement("naziv");
            novNaziv.InnerText = a.nazivA;
            novArtikel.AppendChild(novNaziv);

            XmlElement novaCena = newDoc.CreateElement("cena");
            novaCena.InnerText = a.cenaA;
            novArtikel.AppendChild(novaCena);


            XmlElement novDatum = newDoc.CreateElement("datum");
            novArtikel.AppendChild(novDatum);

            XmlElement novNabave = doc.CreateElement("nabave");
            novNabave.InnerText = a.datumNabaveA;
            novDatum.AppendChild(novNabave); //HERE RAISES AN EXCEPTION

            novSeznamArtikel.AppendChild(novArtikel);
            i++;
        }
    }

    newDoc.AppendChild(novSeznamArtikel);

    XmlTextWriter tw = new XmlTextWriter(izhodna, null);
    tw.Formatting = Formatting.Indented;
    newDoc.WriteContentTo(tw);

    tw.Close();
}


And XML document should look like this:
XML
<?xml version="1.0" encoding="utf-8" ?>
<seznamArtiklov>
  <artikel id="1">
    <naziv>Kruh</naziv>
    <cena>3</cena>
    <datum>
      <nabave>03.09.2012</nabave>
    </datum>
  </artikel>
</seznamArtiklov


If anyone knows the solution to my problem is very welcome. To answer thank you in advance!
Posted

Hi,

Try changing this:
C#
XmlElement novDatum = newDoc.CreateElement("datum");
novArtikel.AppendChild(novDatum);

XmlElement novNabave = doc.CreateElement("nabave");
novNabave.InnerText = a.datumNabaveA;
novDatum.AppendChild(novNabave); //HERE RAISES AN EXCEPTION

into this:
C#
XmlElement novDatum = newDoc.CreateElement("datum");

XmlElement novNabave = doc.CreateElement("nabave");
novNabave.InnerText = a.datumNabaveA;
novDatum.AppendChild(newDoc.ImportNode(novNabave, true)); // first import the node into the document, and then append novNabave to novDatum before you append novDatum to novArtikel

novArtikel.AppendChild(novDatum);


Hope this helps.
 
Share this answer
 
v2
Comments
vezo11 13-Jan-13 4:59am    
Thank you very much! :)

I assumed that elements do not nest correctly or in a way, first add the file and then append.

Again thanks for the reply!
Thomas Daniels 13-Jan-13 5:02am    
You're welcome!
vezo11 13-Jan-13 5:09am    
And if you look this:
XmlElement novDatum = newDoc.CreateElement("datum");
novArtikel.AppendChild(novDatum);
and this:
XmlElement novNabave = doc.CreateElement("nabave");
novNabave.InnerText = a.datumNabaveA;
novDatum.AppendChild(novNabave);

You see the difference.. First i use newDoc, in second case i use doc. My mistake, because I changed the code, when I repaired one another mistake and I forgot to change it back.

But of course, both solutions works! :)
Hi,
i have tried, but the same effect. Exception signals on the same line:
C#
novDatum.AppendChild(novNabave);


Thanks for the reply.
 
Share this answer
 
Comments
Thomas Daniels 13-Jan-13 4:53am    
I updated my answer.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900