Light-weight, simple and fast XML parser with XPath support
Project Links
Meta
Author: Tetsuya Miura
Requires Python: >=3.9
Classifiers
Development Status
- 4 - Beta
Intended Audience
- Developers
License
- OSI Approved :: MIT License
Operating System
- MacOS :: MacOS X
- Microsoft :: Windows
- POSIX
Programming Language
- C++
- Python :: 3 :: Only
- Python :: 3.9
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
Topic
- Software Development :: Libraries
- Text Processing :: Markup :: XML
Python bindings for pugixml
pugixml is a light-weight C++ XML processing library. It features:
- DOM-like interface with rich traversal/modification capabilities
- Extremely fast non-validating XML parser which constructs the DOM tree from an XML file/buffer
- XPath 1.0 implementation for complex data-driven tree queries
- Full Unicode support with Unicode interface variants and automatic encoding conversions
Documentation
- pugixml-python
- pugixml
Example
Loading XML document from file:
from pugixml import pugi
doc = pugi.XMLDocument()
result = doc.load_file('xgconsole.xml')
if not result:
print('parse error: status=%r description=%r' % (result.status, result.description()))
Searching for nodes/attributes with predicates:
tools = doc.child('Profile').child('Tools')
# Find child via predicate (looks for direct children only)
node = tools.find_child(lambda x: x.attribute('AllowRemote').as_bool())
print(node.attribute('Filename').value())
# Find node via predicate (looks for all descendants in depth-first order)
node = doc.find_node(lambda x: x.attribute('AllowRemote').as_bool())
print(node.attribute('Filename').value())
# Find attribute via predicate
attr = tools.last_child().find_attribute(lambda x: x.name() == 'AllowRemote')
print(attr.value())
Selecting nodes via XPath expression:
tools = doc.select_nodes('/Profile/Tools/Tool[@AllowRemote="true" and @DeriveCaptionFrom="lastparam"]')
for tool in tools:
print(tool.node().attribute('Filename').value())
Using query objects and variables:
varset = pugi.XPathVariableSet()
var = varset.add('remote', pugi.XPATH_TYPE_BOOLEAN)
query_remote_tools = pugi.XPathQuery('/Profile/Tools/Tool[@AllowRemote = string($remote)]', varset)
var.set(True)
tools_remote = query_remote_tools.evaluate_node_set(doc)
for tool in tools_remote:
tool.node().print(pugi.PrintWriter())
var.set(False)
tools_local = query_remote_tools.evaluate_node_set(doc)
for tool in tools_local:
tool.node().print(pugi.PrintWriter())
Installation
Installing a package from PyPI
pip install pugixml
Building a package from source
-
Requirements:
- C++17 compatible compiler (see supported compilers)
- CMake ≥ 3.12
-
Installing a package from PyPI:
pip install --no-binary=:all: pugixml
-
Installing the development version from the git repository:
pip install git+https://github.com/miute/pugixml-python.git
License
- pugixml-python is licensed under the MIT License.
- pugixml is licensed under the MIT License.
0.7.0
Jan 14, 2025
0.6.0
Apr 30, 2024
0.5.0
Oct 04, 2023
0.4.0
Nov 11, 2022
0.3.0
Oct 02, 2022
0.2.0
Jun 09, 2022
0.1.0
May 27, 2022
Wheel compatibility matrix
| Platform | CPython 3.9 | CPython 3.10 | CPython 3.11 | CPython 3.12 | CPython 3.13 |
|---|---|---|---|---|---|
| macosx_12_0_arm64 | |||||
| macosx_12_0_x86_64 | |||||
| manylinux2014_x86_64 | |||||
| manylinux_2_17_x86_64 | |||||
| win_amd64 |
Files in release
pugixml-0.7.0-cp310-cp310-macosx_12_0_arm64.whl (240.1KiB)
pugixml-0.7.0-cp310-cp310-macosx_12_0_x86_64.whl (262.5KiB)
pugixml-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.4KiB)
pugixml-0.7.0-cp310-cp310-win_amd64.whl (264.7KiB)
pugixml-0.7.0-cp311-cp311-macosx_12_0_arm64.whl (241.4KiB)
pugixml-0.7.0-cp311-cp311-macosx_12_0_x86_64.whl (263.7KiB)
pugixml-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (375.1KiB)
pugixml-0.7.0-cp311-cp311-win_amd64.whl (266.1KiB)
pugixml-0.7.0-cp312-cp312-macosx_12_0_arm64.whl (243.4KiB)
pugixml-0.7.0-cp312-cp312-macosx_12_0_x86_64.whl (271.4KiB)
pugixml-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.9KiB)
pugixml-0.7.0-cp312-cp312-win_amd64.whl (268.5KiB)
pugixml-0.7.0-cp313-cp313-macosx_12_0_arm64.whl (243.4KiB)
pugixml-0.7.0-cp313-cp313-macosx_12_0_x86_64.whl (271.4KiB)
pugixml-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.8KiB)
pugixml-0.7.0-cp313-cp313-win_amd64.whl (268.5KiB)
pugixml-0.7.0-cp39-cp39-macosx_12_0_arm64.whl (240.2KiB)
pugixml-0.7.0-cp39-cp39-macosx_12_0_x86_64.whl (262.6KiB)
pugixml-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.9KiB)
pugixml-0.7.0-cp39-cp39-win_amd64.whl (249.3KiB)
pugixml-0.7.0.tar.gz (351.0KiB)
No dependencies