Difference between revisions of "KXML"

From Makers Local 256
Jump to: navigation, search
(To Do: increased parsing speed 3 fold in worst case scenario)
m (To Do: remove what's been completed)
Line 35: Line 35:
 
==To Do==
 
==To Do==
 
* Implement XPath subnode matching
 
* Implement XPath subnode matching
* Add an opIndex for child node access (integer)
 
* Add an opIndex for attribute access (string)
 
  
 
[[Category:Software]]                                                  <!--MAKE AS MANY CATEGORIES AS YOU NEED-->
 
[[Category:Software]]                                                  <!--MAKE AS MANY CATEGORIES AS YOU NEED-->

Revision as of 15:39, 17 August 2009

Creator:
Opticron
Status:
Late Development
Born On:
00:49, 22 June 2008 (CDT)
Last Updated:
15:39, 17 August 2009 (CDT)

Overview

This project tracks the development of the DOM XML parsing library written in D called KXML. This project was born of the need for an XML parser where none existed that relied on Phobos, supported unparsed cdata nodes, and worked properly with D1.0. The parser operates on strings and attempts to allocate as little memory as possible by using slice references into the original string provided. The parser is loosely based on the Yage XML parser, also written in D. KXML has a completely new parsing engine, but attempts to remain mostly api-compatible with the Yage parser. The parser can currently deal with XML processing instructions, comments, unparsed character data, standard, and self-closing nodes. It will ignore node types it doesn't understand. The code is on the Narrows SVN server under kxml.

This library supports basic xpath searches including multiple attribute matching and arbitrarily deep searches.

Usage Examples

Create an XML element with the name "foo".

XmlNode foo = new XmlNode("foo");

Add an attribute with the name "bar" and value "foobar"

foo.setAttribute("bar","foobar");

Get the first child node of foo

XmlNode firstchild = foo.getChildren()[0];

Get the attribute named bar

char[]barval = foo.getAttribute("bar");

Parse a string for XML

foo = readDocument(xmlstring);

Search a node's children for a match to the XPath String

XmlNode[]xpathresults = foo.parseXPath("bar/toast");

Do an XPath search with attribute matching

XmlNode[]xpathresults = foo.parseXPath("bar[@type="left" and @lol="cats"]/toast");

Do a search for a toast element arbitrarily deep in the tree whose parent is a bar element

XmlNode[]xpathresults = foo.parseXPath("//bar/toast");

Quirks

  • Always outputs XML with double quoted attributes
  • The input string may not always be the same as the output string
    • Unparsed CData nodes will be escaped and left as regular CData

To Do

  • Implement XPath subnode matching