简体   繁体   中英

XML Not Parsing in Python 2.7 with ElementTree

I have the following XML file which I get from REST API

 <?xml version="1.0" encoding="utf-8"?> <boxes> <home id="1" name="productname"/> <server>111.111.111.111</server> <approved>yes</approved> <creation>2007 handmade</creation> <description>E-Commerce, buying and selling both attested</description> <boxtype> <sizes>large, medium, small</sizes> <vendor>Some Organization</vendor> <version>ANY</version> </boxtype> <method>Handmade, Handcrafted</method> <time>2014</time> </boxes> 

I am able to get the above output, store in a string variable and print in console,

but when I send this to xml ElementTree

import base64
import urllib2
from xml.dom.minidom import Node, Document, parseString
from xml.etree import ElementTree as ET
from xml.etree.ElementTree import XML, fromstring, tostring

print outputxml ##Printing xml correctly,  outputxml contains xml above
content = ET.fromstring(outputxml)
boxes = content.find('boxes')
print boxes
boxtype = boxes.find("boxes/boxtype")

If I print the boxes it is giving me None and hence is giving me below error

boxtype = boxes.find("boxes/boxtype")
AttributeError: 'NoneType' object has no attribute 'find'

The root level node is boxes , and it cannot find boxes within itself.

boxtype = content.find("boxtype")

should be sufficient.

DEMO:

>>> import base64
>>> import urllib2
>>> from xml.dom.minidom import Node, Document, parseString
>>> from xml.etree import ElementTree as ET
>>> from xml.etree.ElementTree import XML, fromstring, tostring
>>> 
>>> print outputxml ##Printing xml correctly,  outputxml contains xml above
<?xml version="1.0" encoding="utf-8"?>
<boxes>
  <home id="1" name="productname"/>
  <server>111.111.111.111</server>
  <approved>yes</approved>
  <creation>2007 handmade</creation>
  <description>E-Commerce, buying and selling both attested</description>
  <boxtype>
      <sizes>large, medium, small</sizes>
      <vendor>Some Organization</vendor>
      <version>ANY</version>
  </boxtype>
  <method>Handmade, Handcrafted</method>
  <time>2014</time>
</boxes>
>>> content = ET.fromstring(outputxml)
>>> boxes = content.find('boxes')
>>> print boxes
None
>>> 
>>> boxes
>>> content #note that the content is the root level node - boxes
<Element 'boxes' at 0x1075a9250> 
>>> content.find('boxtype')
<Element 'boxtype' at 0x1075a93d0>
>>> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM