Blame doc/html/resolvers.html

Packit Service b74dd5
Packit Service b74dd5
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Packit Service b74dd5
<head>
Packit Service b74dd5
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Packit Service b74dd5
<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
Packit Service b74dd5
<title>Document loading and URL resolving</title>
Packit Service b74dd5
<link rel="stylesheet" href="style.css" type="text/css" />
Packit Service b74dd5
<script type="text/javascript">
Packit Service b74dd5
function trigger_menu(event) {
Packit Service b74dd5
    var sidemenu = document.getElementById("sidemenu");
Packit Service b74dd5
    var classes = sidemenu.getAttribute("class");
Packit Service b74dd5
    classes = (classes.indexOf(" visible") === -1) ? classes + " visible" : classes.replace(" visible", "");
Packit Service b74dd5
    sidemenu.setAttribute("class", classes);
Packit Service b74dd5
    event.preventDefault();
Packit Service b74dd5
    event.stopPropagation();
Packit Service b74dd5
}
Packit Service b74dd5
function hide_menu() {
Packit Service b74dd5
    var sidemenu = document.getElementById("sidemenu");
Packit Service b74dd5
    var classes = sidemenu.getAttribute("class");
Packit Service b74dd5
    if (classes.indexOf(" visible") !== -1) {
Packit Service b74dd5
        sidemenu.setAttribute("class", classes.replace(" visible", ""));
Packit Service b74dd5
    }
Packit Service b74dd5
}
Packit Service b74dd5
</script><meta content="width=device-width, initial-scale=1" name="viewport" /></head>
Packit Service b74dd5
<body onclick="hide_menu()">
Packit Service b74dd5
Packit Service b74dd5

Document loading and URL resolving

Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5

Contents

Packit Service b74dd5
    Packit Service b74dd5
  • XML Catalogs
  • Packit Service b74dd5
  • URI Resolvers
  • Packit Service b74dd5
  • Document loading in context
  • Packit Service b74dd5
  • I/O access control in XSLT
  • Packit Service b74dd5
    Packit Service b74dd5
    Packit Service b74dd5

    The normal way to load external entities (such as DTDs) is by using

    Packit Service b74dd5
    XML catalogs.  Lxml also has support for user provided document
    Packit Service b74dd5
    loaders in both the parsers and XSL transformations.  These so-called
    Packit Service b74dd5
    resolvers are subclasses of the etree.Resolver class.

    Packit Service b74dd5
    Packit Service b74dd5

    XML Catalogs

    Packit Service b74dd5

    When loading an external entity for a document, e.g. a DTD, the parser

    Packit Service b74dd5
    is normally configured to prevent network access (see the
    Packit Service b74dd5
    <tt class="docutils literal">no_network</tt> parser option).  Instead, it will try to load the
    Packit Service b74dd5
    entity from their local file system path or, in the most common case
    Packit Service b74dd5
    that the entity uses a network URL as reference, from a local XML
    Packit Service b74dd5
    catalog.

    Packit Service b74dd5

    XML catalogs are the preferred and agreed-on mechanism to load

    Packit Service b74dd5
    external entities from XML processors.  Most tools will use them, so
    Packit Service b74dd5
    it is worth configuring them properly on a system.  Many Linux
    Packit Service b74dd5
    installations use them by default, but on other systems they may need
    Packit Service b74dd5
    to get enabled manually.  The libxml2 site has some documentation
    Packit Service b74dd5
    on how to set up XML catalogs

    Packit Service b74dd5
    Packit Service b74dd5
    Packit Service b74dd5

    URI Resolvers

    Packit Service b74dd5

    Here is an example of a custom resolver:

    Packit Service b74dd5
    >>> from lxml import etree
    Packit Service b74dd5
    Packit Service b74dd5
    >>> class DTDResolver(etree.Resolver):
    Packit Service b74dd5
    ...     def resolve(self, url, id, context):
    Packit Service b74dd5
    ...         print("Resolving URL '%s'" % url)
    Packit Service b74dd5
    ...         return self.resolve_string(
    Packit Service b74dd5
    ...             '<!ENTITY myentity "[resolved text: %s]">' % url, context)