forked from libxmljs/libxmljs
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Roman Shtylman edited this page Jan 3, 2013
·
23 revisions
var libxmljs = require("libxmljs");
var xml = '<?xml version="1.0" encoding="UTF-8"?>' +
'<root>' +
'<child foo="bar">' +
'<grandchild baz="fizbuzz">grandchild content</grandchild>' +
'</child>' +
'<sibling>with content!</sibling>' +
'</root>';
var xmlDoc = libxmljs.parseXmlString(xml);
// xpath queries
var gchild = xmlDoc.get('//grandchild');
console.log(gchild.text()); // prints "grandchild content"
var children = xmlDoc.root().childNodes();
var child = children[0];
console.log(child.attr('foo').value()); // prints "bar"var doc = libxml.parseXmlString([xmlString]);SAX parsing objects are event emitters and callbacks can be connected in typical node.js fashion.
var parser = new libxml.SaxParser();
parser.on('startDocument', ...);
parser.on('startElement', ...);
// parse a complete document
parser.parseString([xmlString]);Push parsers are created the same way DOM parsers are, but take input a chunk at a time:
var parser = new libxml.SaxPushParser();
// connect any callbacks here
parser
.on('startDocument', ...)
.on('startElement', ...)
while(xmlChunk) {
parser.push(xmlChunk);
}To build an XML document simply create all the required nodes (indentation is meant to represent location in the tree, you can capture any intermediate variable to reuse):
var doc = new libxml.Document();
doc.node('root')
.node('child').attr({foo: 'bar'})
.node('grandchild', 'grandchild content').attr({baz: 'fizbuzz'})
.parent()
.parent()
.node('sibling', 'with content!');Calling doc.toString() will yield the following XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child foo="bar">
<grandchild baz="fizbuzz">grandchild content</grandchild>
</child>
<sibling>with content!</sibling>
</root>