Avatar billede rmjdk Nybegynder
09. december 2008 - 16:10 Der er 7 kommentarer

Xml Namespaces med XpathNavigator

Jeg kan ikke benytte Navigators på et Xml dokument da der er tilføjet Namespaces til dokumentet - det virker fint når de ikke er der!
Jeg har rodet lidt med XmlNamespaceManager men kan ikke få skidtet til at virke.

Root elementet i Xml'en ser således ud:
<historyxmlns="http://www.hest.dk/changelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hest.dk/changelog changes.xsd">

Og jeg har prøvet følgende hvor jeg får at vide at "xmlns" er reserveret til XML:
XmlDocument historyDoc = new XmlDocument();
changesDoc.LoadXml("sti til doc");

XmlNamespaceManager nsMgr = new XmlNamespaceManager(historyDoc.NameTable);
nsMgr.AddNamespace("xmlns", "http://www.hest.dk/changelog");
nsMgr.AddNamespace("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
nsMgr.AddNamespace("xsi:schemaLocation", "http://www.hest.dk/changelog changes.xsd");

Hvordan løses dette?
Avatar billede rmjdk Nybegynder
09. december 2008 - 16:13 #1
Avatar billede arne_v Ekspert
09. december 2008 - 16:35 #2
proev:

nsMgr.AddNamespace("", "http://www.hest.dk/changelog");
nsMgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
Avatar billede rmjdk Nybegynder
09. december 2008 - 16:42 #3
Der sker det samme, min navigator på root elementet er null.

nsMgr.AddNamespace("", "http://www.hest.dk/changelog");
nsMgr.AddNamespace("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");

prøvede jeg ligeså.
Avatar billede arne_v Ekspert
09. december 2008 - 19:46 #4
Ups. Der er vist et problem med default namespace og XPath !
Avatar billede arne_v Ekspert
09. december 2008 - 19:47 #5
using System;
using System.Xml;
using System.Xml.XPath;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            XmlDocument doc1 = new XmlDocument();
            doc1.Load(@"C:\history.xml");
            XmlNamespaceManager nsm1 = new XmlNamespaceManager(doc1.NameTable);
            nsm1.AddNamespace("defns", "http://www.hest.dk/changelog");
            nsm1.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            Console.WriteLine(doc1.SelectSingleNode("//defns:history/defns:foobar", nsm1).OuterXml);
            XPathDocument doc2 = new XPathDocument(@"C:\history.xml");
            XPathNavigator nav = doc2.CreateNavigator();
            XmlNamespaceManager nsm2 = new XmlNamespaceManager(nav.NameTable);
            nsm2.AddNamespace("defns", "http://www.hest.dk/changelog");
            nsm2.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            Console.WriteLine(nav.SelectSingleNode("//defns:history/defns:foobar", nsm2).OuterXml);
            Console.ReadKey();
        }
    }
}

virker med:

<history xmlns="http://www.hest.dk/changelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hest.dk/changelog changes.xsd">
    <foobar>noget</foobar>
</history>
Avatar billede rmjdk Nybegynder
10. december 2008 - 10:16 #6
Hey arne

Det virker :)

tak for hjælpen - smid et svar.
Avatar billede arne_v Ekspert
10. december 2008 - 15:02 #7
kommer her
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



IT-JOB