Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > cae3631166a9c9967730c5391ccbe488 > files > 17

nodejs-libxmljs-0.8.1-3.fc18.i686.rpm

# Libxmljs

LibXML bindings for  [node.js](http://nodejs.org/)

```javascript
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"
```

## API

* [[Libxmljs]]
* [[XmlDocument]]
* [[Element]]
* [[Attribute]]
* [[Namespace]]
* [[HtmlDocument]]
* [[Parser]]
* [[SaxParser]]
* [[SaxPushParser]]
* [[SyntaxError]]

Check out some examples on parsing and building xml documents below.

### Builder

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):

```javascript
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
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <child foo="bar">
        <grandchild baz="fizbuzz">grandchild content</grandchild>
    </child>
    <sibling>with content!</sibling>
</root>
```

### Parsing

```javascript
var doc = libxml.parseXmlString([xmlString]);
```

#### SAX Parsing

SAX parsing objects are event emitters and callbacks can be connected in typical node.js fashion.

```javascript
var parser = new libxml.SaxParser();

parser.on('startDocument', ...);
parser.on('startElement', ...);
```

There is also a shorthand syntax for adding event callbacks during parser creation.

```javascript
var parser = new libxml.SaxParser({
  startDocument: function() {...},
  endDocument: function() {...},
  startElementNS: function(elem, attrs, prefix, uri, namespaces) {...},
});

// parse a string
parser.parseString([xmlString]);
```

#### SAX Push Parsing

Push parsers are created the same way DOM parsers are, but take input a chunk at a time:

```javascript
var parser = new libxml.SaxPushParser();

// connect any callbacks here

while(xmlChunk) {
  parser.push(xmlChunk);
}
```