Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scrapinghub/js2xml
Convert Javascript code to an XML document
https://github.com/scrapinghub/js2xml
hacktoberfest javascript python xml
Last synced: 3 days ago
JSON representation
Convert Javascript code to an XML document
- Host: GitHub
- URL: https://github.com/scrapinghub/js2xml
- Owner: scrapinghub
- License: mit
- Created: 2014-04-30T16:41:04.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2022-03-14T21:29:14.000Z (almost 3 years ago)
- Last Synced: 2025-01-12T15:06:07.799Z (10 days ago)
- Topics: hacktoberfest, javascript, python, xml
- Language: Python
- Homepage:
- Size: 286 KB
- Stars: 186
- Watchers: 10
- Forks: 23
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
js2xml
======[![Tests](https://github.com/scrapinghub/js2xml/actions/workflows/tests.yml/badge.svg)](https://github.com/scrapinghub/js2xml/actions/workflows/tests.yml)
[![codecov](https://codecov.io/gh/scrapinghub/js2xml/branch/master/graph/badge.svg)](https://codecov.io/gh/scrapinghub/js2xml)Convert Javascript code to an XML document.
This makes it easy to extract data embedded in JavaScript code using XPath
in a way more robust than just using regular expressions.# Install:
You can install js2xml via [PyPI](https://pypi.python.org/pypi/js2xml):
pip install js2xml
# Example:
```python
>>> import js2xml
>>>
>>> jscode = """function factorial(n) {
... if (n === 0) {
... return 1;
... }
... return n * factorial(n - 1);
... }"""
>>> parsed = js2xml.parse(jscode)
>>>
>>> parsed.xpath("//funcdecl/@name") # extracts function name
['factorial']
>>>
>>> print(js2xml.pretty_print(parsed)) # pretty-print generated XML
>>>
```# Changelog
## v0.5.0 (2022-03-14)
- Add official Python 3.9 and 3.10 support, drop Python 2.7 support, remove
`six` dependency- Support a class call without parameters (e.g. `new Map`)
- Updated the CI setup
## v0.4.0 (2020-06-04)
- Add Python 3.7 and 3.8 support, drop Python 3.4 support
- Use `calmjs.parse` instead of `slimit` for JavaScript parsing
[`calmjs.parse`](https://github.com/calmjs/calmjs.parse) is a well-maintained
fork of [`slimit`](https://github.com/rspivak/slimit) which solves some of
its shortcomings, such as support for JavaScript keywords being used as
object keys.However, `calmjs.parse` also introduces slight changes to the output of
js2xml, making this change backward-incompatible.- Fix unicode surrogate pair handling
- Code cleanup for Python 3
## v0.3.1 (2017-08-03)
- Fix packaging
## v0.3.0 (2017-08-03)
- Add Python 3.6 support
- Deprecate `js2xml.jsonlike`
- Introduce `js2xml.utils.objects` module:- `js2xml.utils.objects.make(node)`: takes a node in the js2xml-parsed
tree and converts to a suitable Python object
- `js2xml.utils.objects.findall(tree, types)`: used to find the
top-most nodes in the js2xml-parsed tree that can be converted to
a `dict`, `list`, `str`, `bool`, `int` or `float`
- `js2xml.utils.objects.getall(tree, types)`: same as `.findall()`
except that it converts what was found to the corresponding Python
object, using `js2xml.utils.objects.make()`- Introduce `js2xml.utils.vars` module:
- `js2xml.utils.vars.get_vars(tree)` can be used to turn a JS snippet
into a python object where you can access JavaScript variables
by name and get the parsed values## v0.2.3 (2017-05-30)
- Regenerate lextab.py and yacctab.py files with PLY 3.10
- Properly set logger level to ERROR## v0.2.2 (2016-12-01)
- Include lextab.py and yacctab.py files to (hopefully) remove write
permission warnings (see issue #16)
- Run tests with tox (locally and on Travis CI)
- Add code coverage reports (+ codecov.io for Travis CI builds)
- Run tests with Python 3.6
- Automatic PyPI deploys from Travis CI## v0.2.1 (2016-06-10)
- Distribute as universal wheel
## v0.2.0 (2016-06-10)
- Python 3 support (tested with 3.4 and 3.5)
- Use logger to suppress Yacc warnings
- require PLY > 3.6
- Use bumpversion for versioning
- Pretty-print output is now a Unicode string## v0.1.2 (2015-05-11)
- Profiling scripts added
- Updated notes with use-case, installing via pip
- Force PLY 3.4 (3.6 has issues with slimit)## v0.1.1 (2014-08-13)
- Fix parsing of objects with integer keys
- Fix try/catch/finally and named function expressions
- Add download URL in setup file (for PyPI)## v0.1 (2014-08-12)
Initial release