Avatar billede mungojerrie Nybegynder
08. marts 2005 - 09:58 Der er 2 kommentarer og
1 løsning

problemer med xpath og namespaces

Hej Jeg har lidt problemer med at trække data ud fra min xmldoc via xpath

Har nedenstående xml:

<?xml version="1.0" encoding="utf-8"?>
<Invoice xmlns="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/"
xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/"
xmlns:main="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/
http://rep.oio.dk/ubl/xml/schemas/0p71/pip/piplax.xsd">
  <com:ID>4544841</com:ID>
  <com:IssueDate>2005-02-10</com:IssueDate>
</Invoice>


og følgende kode:

public void test(string filename){
XmlDocument doc = new XmlDocument();
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr = nav.Compile("//Invoice/com:ID");

doc.Load(filename);
XmlElement root = doc.DocumentElement;

//Create an XmlNamespaceManager for resolving namespaces.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("", "http://rep.oio.dk/ubl/xml/schemas/0p71/pip/");
nsmgr.AddNamespace("com", TransVikali.nameSpaceURI_COM);

expr.SetContext(nsmgr);
XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
    Console.WriteLine(iterator.Current.ToString());
}
}


Problemet er at der ikke bliver udskrevet noget, altså der må være fejl i min selection.
Er der nogen der kan se fejlen ?
(Der kommer ingen fejl på koden)
Avatar billede janegil Nybegynder
08. marts 2005 - 10:34 #1
Jeg forstår ikke så mye av koden du gir her.

Men jeg vet at Xpath har problemer med default namespaces. Fx i XSLT skal man bruke xmlns:oio="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/" og be om oio:Invoice for å matche Invoice. Vet ikke riktig hva det tilsvarer i koden din, men skulle tro det bla.a innebærer at du koder
nsmgr.AddNamespace("oio", "http://rep.oio.dk/ubl/xml/schemas/0p71/pip/");
Avatar billede segato Nybegynder
08. marts 2005 - 16:20 #2
Glem den der namespace mangager den er super besværlig. Brug i stedet XPath til at søge uden namespace. Dette gøres på følgende måde:

//*[local-name()='min_søge_tag']

På den måde undgår du at skulle håndtere alle de namespacesder er og senere hen kan opstå.
Avatar billede mungojerrie Nybegynder
08. marts 2005 - 18:21 #3
fedt, det duer jo bare......
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
Kurser inden for grundlæggende programmering

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