ElementTree XML Namspace

Mark Tolonen M8R-yfto6h at mailinator.com
Fri Nov 14 22:29:19 EST 2008


"Hunter" <hunterji at gmail.com> wrote in message 
news:8066cb68-97db-4b3f-b7e5-826bb242ab33 at k36g2000pri.googlegroups.com...
> We are reviewing a vendor who will output some data in an XML format.
> I will then use python to convert the data to another format for
> upload to another vendor.  I'm having trouble with very basic steps
> with the sample file they sent me.
>
> My very simple test script is:
>
> from xml.etree.ElementTree import parse
> tree = parse("sample.xml")
> print tree.findtext("invoice_batch/batch_id/")
>
> When I apply this to a very concatenated sample.xml with namespace (as
> they send it to me)
> <invoice_batch_generic  xmlns="http://tempuri.org/
> invoice_batch_generic.xsd">
> <invoice_batch>
> <batch_id>1</batch_id>
> </invoice_batch>
> </invoice_batch_generic>
> The result I get is "None".
>
> When I apply this to the same file with the namespace removed
> <invoice_batch_generic>
> <invoice_batch>
> <batch_id>1</batch_id>
> </invoice_batch>
> </invoice_batch_generic>
> The result is "1" which is what I would expect.
>
> This is obviously just the very first step of what will be a much
> larger process.  The actual XML file is several pages long.  I'm using
> Python 2.5.2 (activestate) on Windows Vista.
>
> I'm new to Python and newer to XML.  So what am I missing?  What am I
> doing wrong?
>
> Thanks --Joshua

You're missing the namespace[1].  Try:

print 
tree.findtext("{http://tempuri.org/invoice_batch_generic.xsd}invoice_batch/{http://tempuri.org/invoice_batch_generic.xsd}batch_id/")

-Mark

[1]http://effbot.org/zone/element.htm#xml-namespaces




More information about the Python-list mailing list