Avatar billede donnerfar Nybegynder
11. februar 2009 - 10:57 Der er 2 kommentarer

Ændre namespace og prefix på XmlNode og ChildNodes

Hej

Jeg har en XmlNode og vil gerne indsætte et prefix "gml" på noden samt alle undernoder. Har prøvet nogle forskellige ting, men det vil ikke rigtig virke.

Nogle gode forslag?
Avatar billede arne_v Ekspert
12. februar 2009 - 01:34 #1
Mit forslag: en rekursiv metode som erstatter alle elementer med et nyt element med det ønskede namespace.
Avatar billede arne_v Ekspert
12. februar 2009 - 01:55 #2
Jeg tvivler på at dette her er optimal, men det ser ud til at virke !

using System;
using System.Xml;

namespace E
{
    public class Program
    {
        public static void SetNS(XmlNode n, string prefix, string nsurl)
        {
            if(n.NodeType == XmlNodeType.Element)
            {
                XmlElement oldelm = (XmlElement)n;
                XmlElement newelm = oldelm.OwnerDocument.CreateElement(prefix, oldelm.LocalName, nsurl);
                oldelm.ParentNode.ReplaceChild(newelm, oldelm);
                while(oldelm.HasChildNodes)
                {
                    newelm.AppendChild(oldelm.RemoveChild(oldelm.FirstChild));
                    SetNS(newelm.LastChild, prefix, nsurl);
                }
            }
        }
        public static void Main(string[] args)
        {
            string s = @"<foo>
    <bar>
        <bla>A</bla>
        <blabla>B</blabla>
    </bar>
</foo>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(s);
            doc.Save(Console.Out);
            XmlNode target = doc.SelectSingleNode("//foo/bar[1]");
            SetNS(target, "gml", "http://gml");
            doc.Save(Console.Out);
            Console.ReadKey();
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester