Example #1
0
def parse_xml(content, transport, base_url=None):
    parser = etree.XMLParser(remove_comments=True, resolve_entities=False)
    parser.resolvers.add(ImportResolver(transport))
    try:
        return fromstring(content, parser=parser, base_url=base_url)
    except etree.XMLSyntaxError as exc:
        raise XMLSyntaxError("Invalid XML content received (%s)" % exc.message)
Example #2
0
def parse_xml(content, transport, base_url=None, settings=None):
    """Parse an XML string and return the root Element.

    :param content: The XML string
    :type content: str
    :param transport: The transport instance to load imported documents
    :type transport: zeep.transports.Transport
    :param base_url: The base url of the document, used to make relative
      lookups absolute.
    :type base_url: str
    :param settings: A zeep.settings.Settings object containing parse settings.
    :type settings: zeep.settings.Settings
    :returns: The document root
    :rtype: lxml.etree._Element

    """
    settings = settings or Settings()
    recover = not settings.strict
    parser = etree.XMLParser(remove_comments=True,
                             resolve_entities=False,
                             recover=recover,
                             huge_tree=settings.xml_huge_tree)
    parser.resolvers.add(ImportResolver(transport))
    try:
        return fromstring(content,
                          parser=parser,
                          base_url=base_url,
                          forbid_dtd=settings.forbid_dtd,
                          forbid_entities=settings.forbid_entities)
    except etree.XMLSyntaxError as exc:
        raise XMLSyntaxError("Invalid XML content received (%s)" % exc.msg,
                             content=content)
Example #3
0
def parse_xml(content,
              transport,
              base_url=None,
              strict=True,
              xml_huge_tree=False):
    """Parse an XML string and return the root Element.

    :param content: The XML string
    :type content: str
    :param transport: The transport instance to load imported documents
    :type transport: zeep.transports.Transport
    :param base_url: The base url of the document, used to make relative
      lookups absolute.
    :type base_url: str
    :param strict: boolean to indicate if the lxml should be parsed a 'strict'.
      If false then the recover mode is enabled which tries to parse invalid
      XML as best as it can.
    :param xml_huge_tree: boolean to indicate if lxml should process very
      large XML content.
    :type strict: boolean
    :returns: The document root
    :rtype: lxml.etree._Element

    """
    recover = not strict
    parser = etree.XMLParser(remove_comments=True,
                             resolve_entities=False,
                             recover=recover,
                             huge_tree=xml_huge_tree)
    parser.resolvers.add(ImportResolver(transport))
    try:
        return fromstring(content, parser=parser, base_url=base_url)
    except etree.XMLSyntaxError as exc:
        raise XMLSyntaxError("Invalid XML content received (%s)" % exc.msg,
                             content=content)
Example #4
0
def parse_xml(content, base_url=None, recover=False):
    parser = etree.XMLParser(remove_comments=True,
                             recover=recover,
                             resolve_entities=False)
    try:
        return fromstring(content, parser=parser, base_url=base_url)
    except etree.XMLSyntaxError as exc:
        raise XMLSyntaxError("Invalid XML content received (%s)" % exc)
Example #5
0
    def process_reply(self, envelope):
        envelope_qname = etree.QName(self.nsmap['soap-env'], 'Envelope')
        if envelope.tag != envelope_qname:
            raise XMLSyntaxError(
                ("The XML returned by the server does not contain a valid " +
                 "{%s}Envelope root element. The root element found is %s ") %
                (envelope_qname.namespace, envelope.tag))

        return self.output.deserialize(envelope)
Example #6
0
    def process_reply(self, envelope):
        envelope_qname = etree.QName(self.nsmap['soap-env'], 'Envelope')
        if envelope.tag != envelope_qname:
            raise XMLSyntaxError((
                "The XML returned by the server does not contain a valid " +
                "{%s}Envelope root element. The root element found is %s "
            ) % (envelope_qname.namespace, envelope.tag))

        body = envelope.find('soap-env:Body', namespaces=self.nsmap)
        assert body is not None, "No {%s}Body element found" % (self.nsmap['soap-env'])
        return self.output.deserialize(body)
Example #7
0
def parse_xml(content, transport, base_url=None):
    parser = etree.XMLParser(remove_comments=True)
    try:
        return fromstring(content, parser=parser, base_url=base_url)
    except etree.XMLSyntaxError as exc:
        raise XMLSyntaxError("Invalid XML content received (%s)" % exc.message)