RE: [xml] XPath empty default namespaces (bug?)
- From: "Alex Dron" <avdron infomosaic com>
- To: "Xml Gnome Org" <xml gnome org>
- Subject: RE: [xml] XPath empty default namespaces (bug?)
- Date: Thu, 1 Nov 2001 11:39:29 -0800
Thanks, Daniel,
everything is fine now. I cannot reproduce this error, too :)
I guess it was my fault (probably using old version of the library, I have
several).
Now I have correct node-set, and default attribute appears as well.
About "different point", I'm not using XPath to implement canonicalization,
rather to check implementation - since Canonical XML operates with XPath
node-sets as well as with octet stream.
Thanks again,
Alex
-----Original Message-----
From: xml-admin gnome org [mailto:xml-admin gnome org]On Behalf Of Daniel
Veillard
Sent: Thursday, November 01, 2001 4:51 AM
To: Alex Dron
Cc: Xml Gnome Org
Subject: Re: [xml] XPath empty default namespaces (bug?)
On Wed, Oct 31, 2001 at 11:46:25AM -0800, Alex Dron wrote:
----------------------------------------------
<!DOCTYPE doc [
<!ATTLIST e2 xml:space (default|preserve) 'preserve'>
<!ATTLIST e3 id ID #IMPLIED>
]>
<doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org">
<e1>
<e2 xmlns="">
<e3 id="E3"/>
</e2>
</e1>
</doc>
----------------------------------------------
Should not return <e2> node, but it does! Xerces Xpath works fine with
this
example... It adds default attribute, too - libxml doesn't do it by
itself,
but I can live with it.
Well, I can't reproduce this !
First I double checked that e2 is really built in memory with no namespace
associated to it, and this looks right.
Second to test the XPath engine with a namespace context I included it
into an XPointer expression with a single namespace defined:
orchis:~/XML -> cat tst.xml
<!DOCTYPE doc [
<!ATTLIST e2 xml:space (default | preserve) "preserve">
<!ATTLIST e3 id ID #IMPLIED>
]>
<doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org">
<e1>
<e2 xmlns="">
<e3 id="E3"/>
</e2>
</e1>
</doc>
orchis:~/XML -> cat tst.xpath
xmlns(ietf=http://www.ietf.org)xpointer((//. | //@* | //namespace::*) [
self::ietf:e1 or (parent::ietf:e1 and not(self::text() or self::e2)) or
count(id("E3")|ancestor-or-self::node()) = count(ancestor-or-self::node())])
orchis:~/XML ->
If you look at xpointer.c around line 1022, you will see that
xmlns(ietf=http://www.ietf.org) is directly mapped as a call to
xmlXPathRegisterNs() with the associated prefix and URI.
The xpointer() part will then be evaluated in that context
And the result looks correct:
orchis:~/XML -> ./testXPath --xptr -i tst.xml -f tst.xpath
========================
Expression: xmlns(ietf=http://www.ietf.org)xpointer((//. | //@* |
//namespace::*) [ self::ietf:e1 or (parent::ietf:e1 and not(self::text() or
self::e2)) or count(id("E3")|ancestor-or-self::node()) =
count(ancestor-or-self::node())])
Object is a Node Set :
Set contains 3 nodes:
1 ELEMENT e1
2 ELEMENT e3
ATTRIBUTE id
TEXT
content=E3
3 ATTRIBUTE id
TEXT
content=E3
orchis:~/XML ->
The element e2 is not included in the resulting nodeset, and I don't
understand where your problem comes from. Note that xmlXPathRegisterNs()
is tied to a given evaluation context too, the problem may come from there.
On a different point, I don't understand why you want to use XPath to
implement canonalization, this looks far too heavy weight and not a good
approach at all from an implementation perspective.
Daniel
--
Daniel Veillard | Red Hat Network https://rhn.redhat.com/
veillard redhat com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml gnome org
http://mail.gnome.org/mailman/listinfo/xml
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]