I kinda solved my own problem. I'm posting an example of what works, since I had difficulty establishing this:
import libxml2 import sys XML1 = """<f:Foo xmlns:f="http://www.w3.org/f#"><b:Bar xmlns:b="http://www.w3c.org/b#">foobar</b:Bar></f:Foo>""" xml_parser_options = libxml2.XML_PARSE_RECOVER + libxml2.XML_PARSE_NONET size = sys.getsizeof(XML1) doc = libxml2.readMemory(XML1,size,None,'UTF-8',xml_parser_options) context = doc.xpathNewContext() #context.xpathRegsterNs('f',' http://www.w3.org/f#') #context.xpathRegsterNs('b',' http://www.w3.org/b#') print "test 1" res = context.xpathEval('/*[local-name()="Foo"]/*[local-name()="Bar"]') i = 0 for node in res: print i,':',node i = i + 1 #print "test 2" #res = context.xpathEval('/f:Foo/b:Bar') #i = 0 #for node in res: # print i,':',node # i = i + 1 Result: Test 1 0 : <b:Bar xmlns:b="http://www.w3c.org/b#">foobar</b:Bar> Of course, if you comment in the commented out portions you get test 2 which returns the exact same thing. The point I'm making above is that it might not even be a requirement to register each namespace! It depends really on what kind of xpath you're using. Of course, feel free to bash my answer and tell me I'm wrong. -A > > >> >> I'm thinking it should look something like this, assuming Python language: >> >> Import xmlsec >> Import libxml2 >> >> ... >> >> def test_get_xml_fragment(self,xpath,ns): >> ret = None >> context = self.doc.xpathNewContext() >> if ns is None: >> >> context.xpathRegisterNs(ns,'http://127.0.0.1/#no_place_like_home') >> res = context.xpathEval(xpath) >> i = 0 >> for node in res: >> print i,':',node >> i = i + 1 >> >> >> Please note there is an object in the mix, and I can get the whole to work >> great without namespaces. One good example of how Python should be handling >> namespaces in this case would be great. Even telling me it's forever >> broken...this too would be good to know. (Also, this is not an ideal >> example...I get this. I want something that hobbles before I get something >> hat soars.) >> >> Thanks in advance. >> >> Sent from my Planet >>> >>> Message: 2 >>> Date: Fri, 30 Jan 2015 09:03:40 -0600 >>> From: Ross Reedstrom <reeds...@rice.edu> >>> To: xml@gnome.org >>> Subject: Re: [xml] Xpath issues with libxml2 >>> Message-ID: <20150130150340.ga28...@rice.edu> >>> Content-Type: text/plain; charset=us-ascii >>> >>> Alex - >>> With out examples of what you've tried, it's hard to diagnose the problem. >>> However, seeing 'namespaces' and 'never returns anything' makes me think >>> you're >>> having issues with the default namespace concept. While XML documents have a >>> default namespace, XPaths do not. Once you use namespaces in an xml >>> document, >>> all your xpaths will need to use namespace declarations for all the path >>> parts, >>> even for tags that are defaulted in the document. So, you'll need to declare >>> a namespace prefix that matches the default namespace in the doc. Give us >>> a small example that you've tried that doesn't work, we'll fix it. >>> >>> Ross >>> >>>> On Fri, Jan 30, 2015 at 08:44:15AM -0500, Alex Boese wrote: >>>> Forgive me if this is a deprecated approach (as I am not fully aware), but >>>> I was utilizing "default" libxml2 bindings (not lxml) in Python to >>>> retrieve xml fragments via xpath functions. Normally this seems to work >>>> fine, but with namespace declarations this seems especially problematic as >>>> nothing ever returns and nothing errors. Would it be possible to confirm >>>> what correct functions and order of operations would be for this? Even if >>>> the example is C, I can translate that to Python. >>> >>> -- >>> Ross Reedstrom, Ph.D. reeds...@rice.edu >>> Systems Engineer & Admin, Research Scientist phone: 713-348-6166 >>> Connexions http://cnx.org fax: 713-348-3665 >>> Rice University MS-375, Houston, TX 77005 >>> GPG Key fingerprint = F023 82C8 9B0E 2CC6 0D8E F888 D3AE 810E 88F0 BEDE >>> >>> >>> ------------------------------ >>> >>> Subject: Digest Footer >>> >>> _______________________________________________ >>> xml mailing list >>> xml@gnome.org >>> https://mail.gnome.org/mailman/listinfo/xml >>> >>> >>> ------------------------------ >>> >>> End of xml Digest, Vol 128, Issue 2 >>> *********************************** >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> URL: >> <https://mail.gnome.org/archives/xml/attachments/20150210/13669f43/attachment.html> >> >> ------------------------------ >> >> Subject: Digest Footer >> >> _______________________________________________ >> xml mailing list >> xml@gnome.org >> https://mail.gnome.org/mailman/listinfo/xml >> >> >> ------------------------------ >> >> End of xml Digest, Vol 129, Issue 1 >> ***********************************
_______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml