xml

import xml.etree.ElementTree as ET
help(ET)
fromstring = XML(text, parser=None)
    Parse XML document from string constant.

    This function can be used to embed "XML Literals" in Python code.

    *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.

    Returns an Element instance.

parse(source, parser=None)
    Parse XML document into element tree.

    *source* is a filename or file object containing XML data,
        *parser* is an optional parser instance defaulting to XMLParser.

    Return an ElementTree instance.

xml.etree.ElementTree

import xml.etree.ElementTree as ET

data = r'''<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>cn.xxx.xlsx</groupId>
  <artifactId>xlsx</artifactId>
  <versioning>
    <release>1.1.3</release>
    <versions>
      <version>1.0</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>1.1.2</version>
      <version>1.1.3</version>
    </versions>
    <lastUpdated>20170120083155</lastUpdated>
  </versioning>
</metadata>
'''

root = ET.fromstring(data)
for node in root.iter('version'):
    print(node,node.text)

r = ET.parse('xmltest.xml')
for node1 in root.iter('version'):
    print(node1,node1.text)

xml.parsers.expat(难用)

import requests
from xml.parsers.expat import ParserCreate



class AppHandle(object):

    def __init__(self):
        self.now_tag = ''
        self.version = []

    def start_element(self, tag, attrs):
        self.now_tag = tag

    def version_data(self, version):
        if self.now_tag == 'version':
            if version.strip() != '':
                self.version.append(version)

    def end_element(self,name):
        pass


data = r'''<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>cn.xxx.xlsx</groupId>
  <artifactId>xlsx</artifactId>
  <versioning>
    <release>1.1.3</release>
    <versions>
      <version>1.0</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>1.1.2</version>
      <version>1.1.3</version>
    </versions>
    <lastUpdated>20170120083155</lastUpdated>
  </versioning>
</metadata>
'''

handler = AppHandle()
parser = ParserCreate()
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.version_data
parser.Parse(data)
print(handler.version)