
Product
Secure Your AI-Generated Code with Socket MCP
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
elementtree
Advanced tools
node-elementtree is a Node.js XML parser and serializer based upon the Python ElementTree v1.3 module.
$ npm install elementtree
For the usage refer to the Python ElementTree library documentation - http://effbot.org/zone/element-index.htm#usage.
Supported XPath expressions in find
, findall
and findtext
methods are listed on http://effbot.org/zone/element-xpath.htm.
This example shows how to build a valid XML document that can be published to Atom Hopper. Atom Hopper is used internally as a bridge from products all the way to collecting revenue, called “Usage.” MaaS and other products send similar events to it every time user performs an action on a resource (e.g. creates,updates or deletes). Below is an example of leveraging the API to create a new XML document.
var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var date, root, tenantId, serviceName, eventType, usageId, dataCenter, region,
checks, resourceId, category, startTime, resourceName, etree, xml;
date = new Date();
root = element('entry');
root.set('xmlns', 'http://www.w3.org/2005/Atom');
tenantId = subElement(root, 'TenantId');
tenantId.text = '12345';
serviceName = subElement(root, 'ServiceName');
serviceName.text = 'MaaS';
resourceId = subElement(root, 'ResourceID');
resourceId.text = 'enAAAA';
usageId = subElement(root, 'UsageID');
usageId.text = '550e8400-e29b-41d4-a716-446655440000';
eventType = subElement(root, 'EventType');
eventType.text = 'create';
category = subElement(root, 'category');
category.set('term', 'monitoring.entity.create');
dataCenter = subElement(root, 'DataCenter');
dataCenter.text = 'global';
region = subElement(root, 'Region');
region.text = 'global';
startTime = subElement(root, 'StartTime');
startTime.text = date;
resourceName = subElement(root, 'ResourceName');
resourceName.text = 'entity';
etree = new ElementTree(root);
xml = etree.write({'xml_declaration': false});
console.log(xml);
As you can see, both et.Element and et.SubElement are factory methods which return a new instance of Element and SubElement class, respectively. When you create a new element (tag) you can use set method to set an attribute. To set the tag value, assign a value to the .text attribute.
This example would output a document that looks like this:
<entry xmlns="http://www.w3.org/2005/Atom">
<TenantId>12345</TenantId>
<ServiceName>MaaS</ServiceName>
<ResourceID>enAAAA</ResourceID>
<UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID>
<EventType>create</EventType>
<category term="monitoring.entity.create"/>
<DataCenter>global</DataCenter>
<Region>global</Region>
<StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime>
<ResourceName>entity</ResourceName>
</entry>
This example shows how to parse an XML document and use simple XPath selectors. For demonstration purposes, we will use the XML document located at https://gist.github.com/2554343.
Behind the scenes, node-elementtree uses Isaac’s sax library for parsing XML, but the library has a concept of “parsers,” which means it’s pretty simple to add support for a different parser.
var fs = require('fs');
var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var data, etree;
data = fs.readFileSync('document.xml').toString();
etree = et.parse(data);
console.log(etree.findall('./entry/TenantId').length); // 2
console.log(etree.findtext('./entry/ServiceName')); // MaaS
console.log(etree.findall('./entry/category')[0].get('term')); // monitoring.entity.create
console.log(etree.findall('*/category/[@term="monitoring.entity.update"]').length); // 1
node-elementtree is distributed under the Apache license.
FAQs
XML Serialization and Parsing module based on Python's ElementTree.
The npm package elementtree receives a total of 430,067 weekly downloads. As such, elementtree popularity was classified as popular.
We found that elementtree demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
Security News
As vulnerability data bottlenecks grow, the federal government is formally investigating NIST’s handling of the National Vulnerability Database.
Research
Security News
Socket’s Threat Research Team has uncovered 60 npm packages using post-install scripts to silently exfiltrate hostnames, IP addresses, DNS servers, and user directories to a Discord-controlled endpoint.