summaryrefslogtreecommitdiffstats
path: root/Doc/library/xml.etree.elementtree.rst
diff options
context:
space:
mode:
authorAnjali Bansal <anjali.mca17.du@gmail.com>2019-09-11 14:09:53 (GMT)
committerStefan Behnel <stefan_ml@behnel.de>2019-09-11 14:09:53 (GMT)
commit97b817eae34b77be1ced382e15098a112f547848 (patch)
treeaf98ce59cb002ed0b8b877bddd0e2ee215b2a55b /Doc/library/xml.etree.elementtree.rst
parent1660a61a105bcd62e2dfa77885959a8992e9f14e (diff)
downloadcpython-97b817eae34b77be1ced382e15098a112f547848.zip
cpython-97b817eae34b77be1ced382e15098a112f547848.tar.gz
cpython-97b817eae34b77be1ced382e15098a112f547848.tar.bz2
bpo-33187: Document ElementInclude (XInclude) support in ElementTree (GH-8861)
Diffstat (limited to 'Doc/library/xml.etree.elementtree.rst')
-rw-r--r--Doc/library/xml.etree.elementtree.rst89
1 files changed, 89 insertions, 0 deletions
diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
index 1b4e2c9..abc15d4 100644
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -738,6 +738,95 @@ Functions
:class:`Element` instance and a dictionary.
+.. _elementtree-xinclude:
+
+XInclude support
+----------------
+
+This module provides limited support for
+`XInclude directives <https://www.w3.org/TR/xinclude/>`_, via the :mod:`xml.etree.ElementInclude` helper module. This module can be used to insert subtrees and text strings into element trees, based on information in the tree.
+
+Example
+^^^^^^^
+
+Here's an example that demonstrates use of the XInclude module. To include an XML document in the current document, use the ``{http://www.w3.org/2001/XInclude}include`` element and set the **parse** attribute to ``"xml"``, and use the **href** attribute to specify the document to include.
+
+.. code-block:: xml
+
+ <?xml version="1.0"?>
+ <document xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="source.xml" parse="xml" />
+ </document>
+
+By default, the **href** attribute is treated as a file name. You can use custom loaders to override this behaviour. Also note that the standard helper does not support XPointer syntax.
+
+To process this file, load it as usual, and pass the root element to the :mod:`xml.etree.ElementTree` module:
+
+.. code-block:: python
+
+ from xml.etree import ElementTree, ElementInclude
+
+ tree = ElementTree.parse("document.xml")
+ root = tree.getroot()
+
+ ElementInclude.include(root)
+
+The ElementInclude module replaces the ``{http://www.w3.org/2001/XInclude}include`` element with the root element from the **source.xml** document. The result might look something like this:
+
+.. code-block:: xml
+
+ <document xmlns:xi="http://www.w3.org/2001/XInclude">
+ <para>This is a paragraph.</para>
+ </document>
+
+If the **parse** attribute is omitted, it defaults to "xml". The href attribute is required.
+
+To include a text document, use the ``{http://www.w3.org/2001/XInclude}include`` element, and set the **parse** attribute to "text":
+
+.. code-block:: xml
+
+ <?xml version="1.0"?>
+ <document xmlns:xi="http://www.w3.org/2001/XInclude">
+ Copyright (c) <xi:include href="year.txt" parse="text" />.
+ </document>
+
+The result might look something like:
+
+.. code-block:: xml
+
+ <document xmlns:xi="http://www.w3.org/2001/XInclude">
+ Copyright (c) 2003.
+ </document>
+
+Reference
+---------
+
+.. _elementinclude-functions:
+
+Functions
+^^^^^^^^^
+
+.. function:: xml.etree.ElementInclude.default_loader( href, parse, encoding=None)
+
+ Default loader. This default loader reads an included resource from disk. *href* is a URL.
+ *parse* is for parse mode either "xml" or "text". *encoding*
+ is an optional text encoding. If not given, encoding is ``utf-8``. Returns the
+ expanded resource. If the parse mode is ``"xml"``, this is an ElementTree
+ instance. If the parse mode is "text", this is a Unicode string. If the
+ loader fails, it can return None or raise an exception.
+
+
+.. function:: xml.etree.ElementInclude.include( elem, loader=None)
+
+ This function expands XInclude directives. *elem* is the root element. *loader* is
+ an optional resource loader. If omitted, it defaults to :func:`default_loader`.
+ If given, it should be a callable that implements the same interface as
+ :func:`default_loader`. Returns the expanded resource. If the parse mode is
+ ``"xml"``, this is an ElementTree instance. If the parse mode is "text",
+ this is a Unicode string. If the loader fails, it can return None or
+ raise an exception.
+
+
.. _elementtree-element-objects:
Element Objects