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