Revive E4X as EXQO(ECMA-Script's XML Query Object) with SAX added on as methods for the xml object.
With an added method call xPath(/* which let us use xPath expression to navigate through the Dom*/);
XML file to be use:
<note>
<date>2002-08-01</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Example://E4X spec.
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(xmlDoc.body);
//please look at the bottom for a corresponding to this.
//output body text value
Example:
//with added xPath() method
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(
xmlDoc.xPath("//body");
//relative path expression
);
Example:
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(
xmlDoc.xPath("/note/body");
//absolute path expression
);
This will gain attention to the ease of navigating the dom. Also the other goal is to point to xQuery as a server scripting alternative to popular server side scripting such as php.
change to the E4X spec.
the e4x spec of the look at this make it to where the root element is the container for the object return.
I feel, this should lean more to ESON(JSON) type syntax:
var xmlDoc = {
note:[
{date:"2002-08-01"},
{to:"Tove"},
{from:"Jani"},
{heading:"Reminder"},
{body:"Don't forget me this weekend!"}
]}
document.write(
xmlDoc.note[4].body);
So let's say we do the same for the spec to make it more... Easy to compose a new spec with.
The dom or really HTMLdocument API and XMLdocument API both have methods for manipulating the xml/html.
It stand to reason to mimic those feature via ESON.
As so:
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(
xmlDoc.note[4].body);
And again with the xPath(/*expression*/); //method
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(
xmlDoc.xPath("/note/body")
);
For the first spec, I say to use only xPath 1.0 for the xPath(); method
With attribute, I say to use the xPath(/*expression*/); method to retrieve that via string:
<date attr="value">
2002-08-01
</date>
xmlDoc.xPath("/note/date/@attr");
//xPath 1.0 spec
);
Via ESON syntax:
/*as the attribute node(object) is a child of the date node(object); it stand to reason that it is also a object within the date object that can only hold text*/
xmlDoc.note[0].date[0].attr"; //"value"
to make the spec easier to adopt.
/****
with the change to this draft, I believe the following is none important(but is still kept in for archive):
Making this to "use strict";
I say to make a new statement declaration:
"use EXQO"; or "use ESXQO";
****/
Use ESON syntax when it comes to the EMCAScript environment.
Use xPath(/*expression*/); for all non EMCAScript environment expression, and syntax.
If it's troublesome having the
<xml></xml>(note inclose in quotes)
In the ECMAScript environment(even know we can have "/RegExp/" in it
Than make it possible via SAX(really, looking over the sax spec... It can be optional, or not at all to add... Really, EMCAScript have all we need via Object.prototype.method.call(object, arguments)) function for adding new element... Or via string. Example:
var xmlDoc=new XML();
xmlDoc.load("note.xml");
("I'm such a novice. I spent sometime trying to convey my ideals here... )
(Here the best way I can think of, is to forget sax, and by(via) adding on string, and array methods)
This /**"/note/body"**/ is within body element
xmlDoc.xPath("/note/body").concat("<ps>also, don't forget to bring a jacket</ps>");
This /**"/note/"**/ is after body element
xmlDoc.xPath("/note/").concat("<ps>also, don't forget to bring a jacket</ps>");
This/ **"/note/"**/ is before body element (note: index 3 is note's child header element)
xmlDoc.xPath("/note/").splice(1, 3, "<ps>also, don't forget to bring a jacket</ps>");
/***
NOTE: For the examples above, using splice, and concat method. It might just be better to use these method via ESON syntax and just use xPath methods to preform these manipulation, when using the xPath method of the XML object. I shall convey this ideal at a later time
***/
And with ESON syntax:
xmlDoc.note[4].body += "<ps>Also, don't for get to bring a jacket"</ps>"
/***convey the ESON syntax using splice and concat(NOTE: that array methods shall be use to work with elements, and String method shall be use to work with text node. As you can imagine, RegExp has it place in this with working with text node)***/
This /**"/note/body"**/ is within body element
xmlDoc.note[4].body.concat("<ps>also, don't forget to bring a jacket</ps>");
This /**"/note/"**/ is after body element
xmlDoc.note[note.length ].concat("<ps>also, don't forget to bring a jacket</ps>");
This /**"/note/"**/ is before body element (note: index 4 is note's child heading element)
/***
The following example is the same as:
var note = ["date","to","from","heading","body"];
note.splice(4,0,"ps");
note;//output: ["date","to","from","heading","ps","body"];
***/
xmlDoc.note.splice(4, 0 , "<ps>also, don't forget to bring a jacket</ps>");
/***
Note that this version may receive further editing in the future.
***/
Thank you for reading.