# qiBuild documentation

# qixml module

This is just a set of convenience functions to be used with The ElemtTree XML API <http://docs.python.org/library/xml.etree.elementtree.html>

## qisys.qixml.XMLParser

class `qisys.qixml.``XMLParser`(target)

  This class provides an easy interface to parse XML tags element by element. To work with it, you must inherit from this class and define methods on tags you want to parse.

  `parse`(root)

    This function iterates on the children of the element (or the root if an element is not given) and call `_parse_TAGNAME` functions. :param root: The root element that should be parsed.

  `check_needed`(attribute_name, node_name=None, value=None)

    Raise an Exception if a required attribute is missing

  `xml_elem`(node_name=None)

    Get the xml representation of the target Will set attributes of the node using attributes of the target, except if _dump_<attribute> class exits

Example:

    <foo>
      <bar attr1="fooooooo">Some content!</bar>
      <easy><win>Yes!</win></easy>
      <win>Nooooooooooooooooooooooooooooooooo!</win>
    </foo>

Root of the XML is foo. When `XMLParser.parse` is called, it will try to call `_parse_TAGNAME` where tag name is the actual name of the tag you want to parse. It takes the element as a parameter.

You can call parse recursively (from `_parse_TAGNAME` functions) to parse sub-trees. You always have `backtrace` to know from where you came in `_parse_TAGNAME`. Here is a complete example of a usage on XML above

    class Foo(XMLParser):
        def _parse_bar(self, element):
            print('Attribute attr1:', element.attrib['attr1'])
            print('Content:', element.text)

        def _parse_easy(self, element):
            self.parse(element)

        def _parse_win(self, element):
            # We only want to parse win tag in easy tag.
            if 'easy' in self.backtrace:
                print('Win text:', element.text)

A parser class should not have an attribute with the name of an xml attribute unless it wants to grab them.

Changelog CMake index Python index Index