123 votes

Le nœud à insérer est dans un contexte de document différent

Quand je suis appeler AppendChild, j’obtiens cette erreur : le nœud à insérer est dans un contexte de document différent. »

Il s’agit d’un code qui est converti à partir de sa version VB 6.0 qui était le suivant : s’il vous plaît ignorer les paramètres facultatifs, j’ai des surcharges pour eux dans la version c# :

Si quoi que ce soit est différent en VB 6.0 et c# pour travailler avec XMLs ?

230voto

Rex M Points 80372

Vous devez importer le nœud dans le document avant d’ajouter :

2voto

JAY Points 57
string formatxml(string path)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(new StreamReader(path, System.Text.Encoding.UTF8));
            XmlNode nodeListOtherInterest = xmlDocument.SelectSingleNode("//session/data/account/additionalOtherInterest/address");
            XmlNode acAddress = xmlDocument.SelectSingleNode("//session/data/account/address");
            XmlNode locationaddress = xmlDocument.SelectSingleNode("//session/data/account/location/address");
            XmlNode lineaddress = xmlDocument.SelectSingleNode("//session/data/policy/line/address");
            string strotherinterest = "";
            string stracAddress = "";
            string strlocationaddress = "";
            string strlineaddress = "";
            string straddressess="";
        XmlNodeList statecodes;
        statecodes = xmlDocument.SelectNodes("//session/data/policy/line/linestate/linestateterm/coverage/statCode");


        for (int i = 0; i < statecodes.Count; i++)
        {
            if(statecodes[i].InnerText=="0")
                statecodes[i].ParentNode.RemoveChild(statecodes[i]);
        }

        if (xmlDocument.SelectSingleNode("//session/data/account/additionalOtherInterest/address") != null)
        {
            strotherinterest = "<address_otherinterest>" + nodeListOtherInterest.InnerXml + "</address_otherinterest>";
            nodeListOtherInterest.ParentNode.RemoveChild(nodeListOtherInterest);
        }
        if (xmlDocument.SelectSingleNode("//session/data/account/address") != null)
        {
            stracAddress = "<address_Account>" + acAddress.InnerXml + "</address_Account>";
            acAddress.ParentNode.RemoveChild(acAddress);
        }
        if (xmlDocument.SelectSingleNode("//session/data/account/location/address") != null)
        {
            strlocationaddress = "<address_location>" + locationaddress.InnerXml + "</address_location>";
            locationaddress.ParentNode.RemoveChild(locationaddress);
        }
        if (xmlDocument.SelectSingleNode("//session/data/policy/line/address") != null)
        {
            strlineaddress = "<address_line>" + lineaddress.InnerXml + "</address_line>";
            lineaddress.ParentNode.RemoveChild(lineaddress);
        }
        straddressess= "<addressess>"+strotherinterest +stracAddress+strlocationaddress+strlineaddress + "</addressess>";
        XmlDocument address = new XmlDocument();
        address.LoadXml(straddressess);
        XPathNavigator pnav = xmlDocument.CreateNavigator();
        pnav.MoveToChild("sessions", "");
        pnav.MoveToChild("session","");
        pnav.AppendChild(straddressess);
        xmlDocument.Save(@"C:\Working\Teradata\ssis\out.xml");
        return xmlDocument.OuterXml;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X