@classmethod
def _parse_header(cls, xmlelements, tns, operation):
    """Parse the soap:header and optionally included soap:headerfault elements

          <soap:header
            message="qname"
            part="nmtoken"
            use="literal|encoded"
            encodingStyle="uri-list"?
            namespace="uri"?
          />*

        The header can optionally contain one ore more soap:headerfault
        elements which can contain the same attributes as the soap:header::

           <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                             encodingStyle="uri-list"? namespace="uri"?/>*

        """
    result = []
    for xmlelement in xmlelements:
        data = cls._parse_header_element(xmlelement, tns)
        data['faults'] = []
        fault_elements = xmlelement.findall('soap:headerfault', namespaces=
            operation.binding.nsmap)
        for fault_element in fault_elements:
            fault_data = cls._parse_header_element(fault_element, tns)
            data['faults'].append(fault_data)
        result.append(data)
    return result
