{ "info": { "author": "Maciej Kozik", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Text Processing :: Markup :: XML" ], "description": "# AskXML\nRun SQL statements on XML documents\n\n```xml\n\n tasty kiwi\n old kiwi\n apple\n\n```\n\n```python\n\n>>> from askxml import AskXML\n\n>>> conn = AskXML('file.xml')\n# get an SQL cursor object\n>>> c = conn.cursor()\n>>> results = c.execute(\"SELECT color FROM fruit WHERE _text LIKE '% kiwi'\")\n>>> for row in results.fetchall():\n>>> print(row)\n[('green'), ('dark green')]\n\n# cleanup\n>>> c.close()\n>>> conn.close()\n```\n\n## BUT WHY?\n\nThere are data dumps like stack exchange's, stored in XML. They're big, so fitting them whole into memory is not desired. With AskXML you can query things fast, and rather comfortably (provided you know SQL).\n\nBefore you go any further though, it's very possible your task can be achieved with XPATH and ElementTree XML API, so give that a look if you haven't heard of it.\n\n## Installation\n\nA pip package is on it's way.\n\n## Usage\n\n#### Adding indexes and defining columns\n\nIf you want to add indexes, columns or set attribute types, you can pass a list of table definitions:\n\n```python\n\nfrom askxml import *\ntables = [\n Table('fruit',\n Column('age', Integer()),\n Index('age'))\n]\nwith AskXML('file.xml', table_definitions=tables) as conn:\n c = conn.cursor()\n c.execute(\"UPDATE fruit SET age = 5 WHERE _text = 'tasty kiwi'\")\n c.close()\n```\n\nYou don't need to define all existing columns or tables. If a definition was not found, it's created with all column types being Text by default.\n\n#### Node hierarchy\n\nIf you want to find nodes that are children of another node by attribute:\n\n```xml\n\n\n \n \n \n \n\n```\n\n```python\n\nfrom askxml import *\nwith AskXML('file.xml') as conn:\n c = conn.cursor()\n results = c.execute(\"\"\"\n SELECT name FROM someParent_someChild as child\n INNER JOIN someParent as parent ON parent._id = child._parentId\n WHERE parent.name = 'Jerry'\n \"\"\")\n for row in results.fetchall():\n print(row)\n c.close()\n```\n\nThis will print `[('Morty'), ('Summer')]`.\n\n#### Inserting new data\n\nIf you want to add a new tag:\n\n```python\ncursor.execute(\"INSERT INTO fruit (color, _text) VALUES ('red', 'strawberry')\")\n```\n\nOr if your nodes have a hierarchy:\n\n```python\ncursor.execute(\"INSERT INTO someParent_someChild (name, _parentId) VALUES ('a baby', 1)\")\n```\n\n## License\n\nAskXML is licensed under [MIT license](https://github.com/kamac/AskXML/blob/blob/master/LICENSE)\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kamac/AskXML", "keywords": "xml sql statements query", "license": "", "maintainer": "", "maintainer_email": "", "name": "askxml", "package_url": "https://pypi.org/project/askxml/", "platform": "", "project_url": "https://pypi.org/project/askxml/", "project_urls": { "Homepage": "https://github.com/kamac/AskXML" }, "release_url": "https://pypi.org/project/askxml/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Run SQL statements on XML documents", "version": "1.0.0" }, "last_serial": 3764641, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f8304205cbfb1a3bbd4bbf2ea9cef8a9", "sha256": "9908b6b35baba2c9a1ae028091c94bc109587b7e84b448e86047bc5e2ddd2f93" }, "downloads": -1, "filename": "askxml-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f8304205cbfb1a3bbd4bbf2ea9cef8a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10474, "upload_time": "2018-04-14T16:10:28", "url": "https://files.pythonhosted.org/packages/5c/7e/3abbd91cf720ec33cefce91a57064b7044fec50218ffcec3f5de0f115697/askxml-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b71fb85f0e12360f804887164a46308", "sha256": "5ab887bffaaa6af45fd35d459093a8cb492db256f82b290a855d3a7aec1f7856" }, "downloads": -1, "filename": "askxml-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0b71fb85f0e12360f804887164a46308", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8343, "upload_time": "2018-04-14T16:10:29", "url": "https://files.pythonhosted.org/packages/04/76/ce523e19e4b11a364c5dcc6f7e3da5cdc42b27485be7482bb3dfd6d4708d/askxml-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f8304205cbfb1a3bbd4bbf2ea9cef8a9", "sha256": "9908b6b35baba2c9a1ae028091c94bc109587b7e84b448e86047bc5e2ddd2f93" }, "downloads": -1, "filename": "askxml-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f8304205cbfb1a3bbd4bbf2ea9cef8a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10474, "upload_time": "2018-04-14T16:10:28", "url": "https://files.pythonhosted.org/packages/5c/7e/3abbd91cf720ec33cefce91a57064b7044fec50218ffcec3f5de0f115697/askxml-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b71fb85f0e12360f804887164a46308", "sha256": "5ab887bffaaa6af45fd35d459093a8cb492db256f82b290a855d3a7aec1f7856" }, "downloads": -1, "filename": "askxml-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0b71fb85f0e12360f804887164a46308", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8343, "upload_time": "2018-04-14T16:10:29", "url": "https://files.pythonhosted.org/packages/04/76/ce523e19e4b11a364c5dcc6f7e3da5cdc42b27485be7482bb3dfd6d4708d/askxml-1.0.0.tar.gz" } ] }