questions using libxml2

B

bdecker

Hello,

I was hoping that someone here can please answer two questions
concerning libxml2 python module use:

1. Is this snippet correct?
doc = libxml2.parseDoc(readfile(filename))
ctxt = doc.xpathNewContext()
ctxt.xpathRegisterNs("xlink","http://www.w3.org/1999/xlink")

.... if so, to what purpose does one register the namespace
(xpathRegisterNs)???
It doesn't seem to effect the outcome of the script:
http://66.102.7.104/search?q=cache:...0/weblog/2004/Jan+xlink+python&hl=en&ie=UTF-8

....so I can't understand why it is being used.


2. Why do I seem to get unpredictable behaviour from code like:
doc = libxml2.parseFile("D:\\D\\XML\\system.xml")
current_nodes = doc.xpathEval("descendant-or-self::linux")
node = current_nodes[0]
print node
ctxt = node
while node:
node = node.xpathNextDescendant(node)
print node

How would I generate a list of all decendants of a node (besides
searching for children of children)?


3. Is there any such thing as an xlink ELEMENT (where element.ns =
"http://www.w3.org/1999/xlink")? The only examples that I can find only
demonstrate xlink ATTRIBUTES (where the namespace has to be declared in
every element with xlink attributes). I don't even know the reason for
declaring a namespace if we always do that.


Hopefuly someone can clear up my confusion.


Ben
 
P

Patrick TJ McPhee

% 1. Is this snippet correct?
% doc = libxml2.parseDoc(readfile(filename))
% ctxt = doc.xpathNewContext()
% ctxt.xpathRegisterNs("xlink","http://www.w3.org/1999/xlink")

It looks fine as far as it goes.

% ... if so, to what purpose does one register the namespace
% (xpathRegisterNs)???

It depends on what you're doing. If you want to match against an element
or attribute in the xlink name space, then you need to register the name
space and use the registered prefix in your searches. For instance, you
could look for

//*[@xlink:href]

to find all the elements with links from them. In the actual document,
the name space prefix could be different, so you could match

<note xl:href='http://www.somewhere.somewhat/etc/etc/etc'>...</note>

% ...so I can't understand why it is being used.

It might not be necessary.

% 3. Is there any such thing as an xlink ELEMENT (where element.ns =

There isn't, but why not read the overview and find out?
http://www.w3.org/TR/xlink

% demonstrate xlink ATTRIBUTES (where the namespace has to be declared in
% every element with xlink attributes). I don't even know the reason for

You might want to read up on name spaces, too. The key is to have the
name space declaration be in scope at the point the name space is
used. This doesn't require that it be declared in every element
that uses it, although some tools might handle it that way rather than
migrating the declaration up an element. Try adding the name space
declaration to the top-level element in your document tree.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top