Re: [xml] xmllint and namespaces

Hi Daniel,

Thanks for your help, but I am not over with the issue. I prefered not to pollute my files and so I got rid of the namespace prefix (as I will not mix my xml-data with other). So

<giml:giml xmlns:giml="";>

has been changed to

<giml xmlns="";>

I keep the default namespace. No all of my xpath queries are broken. Sorry that I post a code fragment ...

  if((ctxt=xmlXPathNewContext(elements->doc))) {
    if(root_node) ctxt->node=root_node;
    else ctxt->node=xmlDocGetRootElement(elements->doc);
    gitk_log("  before xmlXPathCompiledEval()");
g_free(ctxt->namespaces);// @todo does xmlXPathFreeContext does that for me too ?
  else { gitk_err("failed to get xpath context"); }

When I execute this I get :
[gitktools.c:101] :   before xmlXPathCompiledEval()
[gitkerrors.c:74] : libxml-error: Error Undefined namespace prefix
[gitkerrors.c:74] : libxml-error: xmlXPathCompiledEval: evaluation failed

Both versions (one is disabled with comments) have the problem. Can I use Xpath withourt namespace (I think so) and if yes how ?


Hi hi,

I am sure this has been aksed bevor but wasn't succesful in the mail-archive.
I've just tried to use

xmllint --noout --valid test.xml

on test.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE giml SYSTEM "/opt/gitk/share/gitk/giml.dtd">
<giml:giml xmlns:giml="";>

a fragment of the dtd :

<!ELEMENT giml (context+)>
<!ELEMENT context (#PCDATA)>

and get the following output:

test.xml:6: validity error: Element giml content doesn't follow the DTD
Expecting (context)+, got (giml:context )

this looks to me as libxml2 would like me to put the name space into the dtd, which I don't belive is the right thing to do.

Well it is ... Validation happens before namespace recognition.
You must use the QName in the DTD as seens in the instance:

<!DOCTYPE giml:giml SYSTEM "/opt/gitk/share/gitk/giml.dtd">
<giml:giml xmlns:giml="";>

<!ELEMENT giml:glim (glim:context+)>
<!ELEMENT giml:context (#PCDATA)>

and don't forgot to add xmlns:giml as part of <!ATTLIST giml:glim

Or use the default namespace <giml xmlns="";>

and keep your DTD as-is

  And please make sure you use the latests versions of libxml2


      \|/            Stefan Kost
     <@ @>           private            business
+-oOO-(_)-OOo------------------------------------------------------ - - -  -   -
|       __  Address  Simildenstr. 5     HTWK Leipzig, Fb IMN, Postfach 300066
|      ///           04277 Leipzig      04277 Leipzig
| __  ///            Germany            Germany
| \\\///    Phone    +49341 2253538     +49341 30766101
|  \__/     EMail    st_kost gmx net    kost imn htwk-leipzig de
|           WWW
===-=-=--=---=---------------------------------- - - -  -    -

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]