You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2016/04/11 00:48:13 UTC

[02/49] git commit: [flex-asjs] [refs/heads/develop] - First commit of XML processing (non functional) Includes a shell of "JXON" classes for alternate XML processing

First commit of XML processing (non functional)
Includes a shell of "JXON" classes for alternate XML processing


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/a50de213
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/a50de213
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/a50de213

Branch: refs/heads/develop
Commit: a50de213a48513d8d7eccfb02ccdefd0fc49d29c
Parents: e75e1f3
Author: Harbs <ha...@in-tools.com>
Authored: Mon Jan 4 14:05:49 2016 +0200
Committer: Harbs <ha...@in-tools.com>
Committed: Mon Jan 4 14:05:49 2016 +0200

----------------------------------------------------------------------
 .../projects/Effects/.actionScriptProperties    |   2 +-
 frameworks/projects/XML/as/src/Namespace.as     | 134 +++
 frameworks/projects/XML/as/src/QName.as         |  89 ++
 frameworks/projects/XML/as/src/XML.as           | 986 +++++++++++++++++++
 frameworks/projects/XML/as/src/XMLClasses.as    |  35 +
 frameworks/projects/XML/as/src/XMLList.as       | 611 ++++++++++++
 .../as/src/org/apache/flex/core/xml/IJXON.as    |  29 +
 .../XML/as/src/org/apache/flex/core/xml/JXON.as | 544 ++++++++++
 .../org/apache/flex/core/xml/JXONAttribute.as   |  79 ++
 .../src/org/apache/flex/core/xml/JXONComment.as |  52 +
 .../org/apache/flex/core/xml/JXONInstruction.as |  52 +
 .../as/src/org/apache/flex/core/xml/JXONList.as |  28 +
 .../org/apache/flex/core/xml/JXONNamespace.as   |  67 ++
 .../as/src/org/apache/flex/core/xml/JXONText.as |  52 +
 frameworks/projects/XML/basic-manifest.xml      |  24 +
 frameworks/projects/XML/build.xml               | 166 ++++
 .../projects/XML/compile-as-to-js-config.xml    |  77 ++
 frameworks/projects/XML/compile-asjs-config.xml |  78 ++
 frameworks/projects/XML/compile-config.xml      |  83 ++
 frameworks/projects/XML/compile-js-config.xml   |  87 ++
 20 files changed, 3274 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/Effects/.actionScriptProperties
----------------------------------------------------------------------
diff --git a/frameworks/projects/Effects/.actionScriptProperties b/frameworks/projects/Effects/.actionScriptProperties
index 629fa74..c89fb43 100644
--- a/frameworks/projects/Effects/.actionScriptProperties
+++ b/frameworks/projects/Effects/.actionScriptProperties
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <actionScriptProperties analytics="false" mainApplicationPath="Effects.as" projectUUID="c7b22e99-ecef-48e3-90be-f80d3bc54d5f" version="11">
-  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="false" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" removeUnusedRSL="true" sourceFolderPath="as/src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
+  <compiler additionalCompilerArguments="-locale en_US&#10;-define=COMPILE::AS3,true&#10;-define=COMPILE::JS,false" autoRSLOrdering="true" copyDependentFiles="false" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" removeUnusedRSL="true" sourceFolderPath="as/src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
     <compilerSourcePath/>
     <libraryPath defaultLinkType="0">
       <libraryPathEntry kind="4" path="">

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/Namespace.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/Namespace.as b/frameworks/projects/XML/as/src/Namespace.as
new file mode 100644
index 0000000..ab5e56e
--- /dev/null
+++ b/frameworks/projects/XML/as/src/Namespace.as
@@ -0,0 +1,134 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+COMPILE::JS
+{
+package
+{
+	public class Namespace
+	{
+		public function Namespace(prefixOrUri:Object=null,uriValue:Object=null)
+		{
+			/*
+				When the Namespace constructor is called with a no arguments, one argument uriValue or two arguments prefixValue and uriValue, the following steps are taken:
+				1. Create a new Namespace object n
+				2. If prefixValue is not specified and uriValue is not specified
+				  a. Let n.prefix be the empty string
+				  b. Let n.uri be the empty string
+				3. Else if prefixValue is not specified
+				  a. If Type(uriValue) is Object and uriValue.[[Class]] == "Namespace"
+				    i. Let n.prefix = uriValue.prefix
+				    ii. Let n.uri = uriValue.uri
+				  b. Else if Type(uriValue) is Object and uriValue.[[Class]] == "QName" and uriValue.uri is not null
+				    i. Let n.uri = uriValue.uri NOTE implementations that preserve prefixes in qualified names may also set n.prefix = uriValue.[[Prefix]]
+				  c. Else
+				    i. Let n.uri = ToString(uriValue)
+				    ii. If (n.uri is the empty string), let n.prefix be the empty string
+				    iii. Else n.prefix = undefined
+				4. Else
+				  a. If Type(uriValue) is Object and uriValue.[[Class]] == "QName" and uriValue.uri is not null
+				    i. Let n.uri = uriValue.uri
+				  b. Else
+				    i. Let n.uri = ToString(uriValue)
+				  c. If n.uri is the empty string
+				    i. If prefixValue is undefined or ToString(prefixValue) is the empty string
+				      1. Let n.prefix be the empty string
+				    ii. Else throw a TypeError exception
+				  d. Else if prefixValue is undefined, let n.prefix = undefined
+				  e. Else if isXMLName(prefixValue) == false
+				  i. Let n.prefix = undefined
+				  f. Else let n.prefix = ToString(prefixValue)
+				5. Return n
+			*/
+			if(!uriValue && prefixOrUri) //we don't have a prefix defined
+			{
+				var uriVal:Object = uriValue ? uriValue : prefixOrUri;
+				if(uriVal is Namespace)
+				{
+					_prefix = (uriVal as Namespace).prefix;
+					_uri = (uriVal as Namespace).uri;
+				}
+				else if(uriVal is QName)
+				{
+					if((uriVal as QName).uri)
+						_uri = (uriVal as QName).uri;
+				}
+				else {
+					_uri = uriVal.toString();
+					if(_uri == "")
+						_prefix = "";
+				}
+			}
+			else if(uriValue)
+			{
+				// something is specified as the URI otherwise fall through and leave both the prefix and uri blank
+				if(uriValue is QName)
+				{
+					if((uriValue as QName).uri)
+						_uri = (uriValue as QName).uri;
+				}
+				else {
+					_uri = uriValue.toString();
+				}
+
+				if(!_uri)
+				{
+					if(!prefixOrUri)
+						_prefix = "";
+					else
+						throw new TypeError("invalid prefix");
+				}
+				else
+					_prefix = prefixOrUri.toString();
+
+			}
+		}
+
+		private var _uri:String = "";
+		public function get uri():String
+		{
+			return _uri;
+		}
+		public function set uri(value:String):void
+		{
+			_uri = value;
+		}
+		
+		private var _prefix:String;
+		public function get prefix():String
+		{
+			return _prefix;
+		}
+		public function set prefix(value:String):void
+		{
+			_prefix = value;
+		}
+
+		public function toString():String
+		{
+			return uri;
+		}
+
+		public function valueOf():Object
+		{
+			return this;
+		}
+	}
+}
+}
+

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/QName.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/QName.as b/frameworks/projects/XML/as/src/QName.as
new file mode 100644
index 0000000..23a303a
--- /dev/null
+++ b/frameworks/projects/XML/as/src/QName.as
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+COMPILE::JS
+{
+package
+{
+	public class QName
+	{
+		public function QName(qNameOrUri:*=null,localNameVal:*=null)
+		{
+			/*
+				When the QName constructor is called with a one argument Name or two arguments Namespace and Name the following steps are taken:
+				1. If (Type(Name) is Object and Name.[[Class]] == "QName")
+				  a. If (Namespace is not specified), return a copy of Name
+				  b. Else let Name = Name.localName
+				2. If (Name is undefined or not specified)
+				  a. Let Name = “”
+				3. Else let Name = ToString(Name)
+				4. If (Namespace is undefined or not specified)
+				  a. If Name = "*"
+				    i. Let Namespace = null
+				  b. Else
+				    i. Let Namespace = GetDefaultNamespace()
+				5. Let q be a new QName with q.localName = Name
+				6. If Namespace == null
+				  a. Let q.uri = null NOTE implementations that preserve prefixes in qualified names may also set q.[[Prefix]] to undefined
+				7. Else
+				  a. Let Namespace be a new Namespace created as if by calling the constructor new Namespace(Namespace)
+				  b. Let q.uri = Namespace.uri NOTE implementations that preserve prefixes in qualified names may also set q.[[Prefix]] to Namespace.prefix
+				8. Return q
+			*/
+			if(qNameOrUri is QName)
+			{
+				_uri = qNameOrUri.uri;
+				_localName = qNameOrUri.localName;
+			}
+			else if(qNameOrUri is Namespace)
+			{
+				_uri = (qNameOrUri as Namespace).uri;
+				if(localNameVal)
+					_localName = localNameVal.toString();
+			}
+			else if (qNameOrUri.toString())
+			{
+				_uri = qNameOrUri;
+				if(localName)
+					_localName = localName;
+			}
+		}
+
+		private var _uri:String;
+		public function get uri():String
+		{
+			return _uri;
+		}
+		public function set uri(value:String):void
+		{
+			_uri = value;
+		}
+		
+		private var _localName:String;
+		public function get localName():String
+		{
+			return _localName;
+		}
+		public function set localName(value:String):void
+		{
+			_localName = value;
+		}
+	}
+}
+}
+

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/XML.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XML.as b/frameworks/projects/XML/as/src/XML.as
new file mode 100644
index 0000000..e7bc294
--- /dev/null
+++ b/frameworks/projects/XML/as/src/XML.as
@@ -0,0 +1,986 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+COMPILE::JS
+{
+package
+{
+	public class XML
+	{
+		/*
+		 * Dealing with namespaces:
+		 * If the name is qualified, it has a prefix. Otherwise, the prefix is null.
+		 * Additionally, it has a namespaceURI. Otherwise the namespaceURI is null.
+		 * the prefix together with the namespaceURI form a QName
+		*/
+
+		/**
+		 * [static] Determines whether XML comments are ignored when XML objects parse the source XML data.
+		 *  
+		 */
+		static public var ignoreComments:Boolean = true;
+		
+		/**
+		 * [static] Determines whether XML processing instructions are ignored when XML objects parse the source XML data.
+		 *  
+		 */
+		static public var ignoreProcessingInstructions:Boolean = true;
+		
+		/**
+		 * [static] Determines whether white space characters at the beginning and end of text nodes are ignored during parsing.
+		 *  
+		 */
+		static public var ignoreWhitespace:Boolean = true;
+		
+		/**
+		 * [static] Determines the amount of indentation applied by the toString() and toXMLString() methods when the XML.prettyPrinting property is set to true.
+		 * 
+		 */
+		static public var prettyIndent:int = 2;
+		
+		/**
+		 * [static] Determines whether the toString() and toXMLString() methods normalize white space characters between some tags.
+		 * 
+		 */
+		static public var prettyPrinting:Boolean = true;
+		
+		static private function fromNode(node:Element):XML
+		{
+			// returns an XML object from an existing node without the need to parse the XML.
+			
+		}
+
+		public function XML(xml:String)
+		{
+			var parser:DOMParser = new DOMParser();
+			_parentDocument = parser.parseFromString(xml, "application/xml");
+			_node = _parentDocument.childNodes[0];
+			//need to deal with errors https://bugzilla.mozilla.org/show_bug.cgi?id=45566
+			
+			// get rid of nodes we do not want 
+
+			//loop through the child nodes and build XML obejcts for each.
+
+		}
+		
+		private var _doc:Document;
+		private var _children:Array;
+		private var _attributes:Array;
+		private var _processingInstructions:Array;
+		private var _collection:HTMLCollection;
+		private var _nodeList:NodeList;
+		private var _parentDocument:Document;
+		private var _node:Element;
+		private var _parentXML:XML;
+		private var _name:*;
+		private var _value:String;
+
+
+		public function getNode():Element
+		{
+			return _node;
+		}
+		
+		public function getDocument():Document
+		{
+			return _parentDocument;
+		}
+
+		public function setDocument(doc:Document)
+		{
+			if(_parentDocument != doc)
+			{
+				if(_node.parentElement)
+					_node.parentElement.removeChild(_node);
+				//I think just using importNode on the top level node with deep set to true if enough.
+				if(doc)
+					_node = doc.importNode(_node,true);
+				_parentDocument = doc;
+			}
+		}
+		/**
+		 * Adds a namespace to the set of in-scope namespaces for the XML object.
+		 *
+		 * @param ns
+		 * @return 
+		 * 	
+		 */
+		public function addNamespace(ns:Object):XML
+		{
+			/*
+				When the [[AddInScopeNamespace]] method of an XML object x is called with a namespace N, the following steps are taken:
+				1. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", “attribute”}, return
+				2. If N.prefix != undefined
+				  a. If N.prefix == "" and x.[[Name]].uri == "", return
+				  b. Let match be null
+				  c. For each ns in x.[[InScopeNamespaces]]
+				    i. If N.prefix == ns.prefix, let match = ns
+				  d. If match is not null and match.uri is not equal to N.uri
+				    i. Remove match from x.[[InScopeNamespaces]]
+				  e. Let x.[[InScopeNamespaces]] = x.[[InScopeNamespaces]] ∪ { N }
+				  f. If x.[[Name]].[[Prefix]] == N.prefix
+				    i. Let x.[[Name]].prefix = undefined
+				  g. For each attr in x.[[Attributes]]
+				    i. If attr.[[Name]].[[Prefix]] == N.prefix, let attr.[[Name]].prefix = undefined
+				3. Return
+			*/
+			return null;
+		}
+		
+		/**
+		 * Appends the given child to the end of the XML object's properties.
+		 *
+		 * @param child
+		 * @return 
+		 * 
+		 */
+		public function appendChild(child:XML):XML
+		{
+			/*
+				[[Insert]] (P, V)
+				1. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", "attribute"}, return
+				2. Let i = ToUint32(P)
+				3. If (ToString(i) is not equal to P), throw a TypeError exception
+				4. If Type(V) is XML and (V is x or an ancestor of x) throw an Error exception
+				5. Let n = 1
+				6. If Type(V) is XMLList, let n = V.[[Length]]
+				7. If n == 0, Return
+				8. For j = x.[[Length]]-1 downto i, rename property ToString(j) of x to ToString(j + n)
+				9. Let x.[[Length]] = x.[[Length]] + n
+				10. If Type(V) is XMLList
+				  a. For j = 0 to V.[[Length-1]]
+				    i. V[j].[[Parent]] = x
+				    ii. x[i + j] = V[j]
+				11. Else
+				  a. Call the [[Replace]] method of x with arguments i and V
+				12. Return
+			*/
+			child.setDocument(_parentDocument);
+			child.setParent(this);
+			
+			_children.push(child);
+			_node.appendChild(child.getNode());
+
+			return child;
+		}
+		
+		
+		/**
+		 * Returns the XML value of the attribute that has the name matching the attributeName parameter.
+		 *
+		 * @param attributeName
+		 * @return 
+		 * 
+		 */
+		public function attribute(attributeName:*):XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns a list of attribute values for the given XML object.
+		 *
+		 * @return 
+		 * 
+		 */
+		public function attributes():XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Lists the children of an XML object.
+		 *
+		 * @param propertyName
+		 * @return 
+		 * 
+		 */
+		public function child(propertyName:Object):XMLList
+		{
+			/*
+			 * 
+			1. If ToString(ToUint32(P)) == P
+			  a. Let list = ToXMLList(x)
+			  b. Return the result of calling the [[Get]] method of list with argument P
+			2. Let n = ToXMLName(P)
+			3. Let list be a new XMLList with list.[[TargetObject]] = x and list.[[TargetProperty]] = n
+			4. If Type(n) is AttributeName
+			  a. For each a in x.[[Attributes]]
+			    i. If ((n.[[Name]].localName == "*") or (n.[[Name]].localName == a.[[Name]].localName)) and ((n.[[Name]].uri == null) or (n.[[Name]].uri == a.[[Name]].uri))
+			      1. Call the [[Append]] method of list with argument a
+			  b. Return list
+			5. For (k = 0 to x.[[Length]]-1)
+			  a. If ((n.localName == "*") or ((x[k].[[Class]] == "element") and (x[k].[[Name]].localName == n.localName))) and ((n.uri == null) or ((x[k].[[Class]] == “element”) and (n.uri == x[k].[[Name]].uri)))
+			    i. Call the [[Append]] method of list with argument x[k]
+			6. Return list
+			*/
+			return null;
+		}
+		
+		/**
+		 * Identifies the zero-indexed position of this XML object within the context of its parent.
+		 *
+		 * @return 
+		 * 
+		 */
+		public function childIndex():int
+		{
+			return -1;
+		}
+		
+		/**
+		 * Lists the children of the XML object in the sequence in which they appear.
+		 *
+		 * @return 
+		 * 
+		 */
+		public function children():XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Lists the properties of the XML object that contain XML comments.
+		 *
+		 * @return 
+		 * 
+		 */
+		public function comments():XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Compares the XML object against the given value parameter.
+		 *
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function contains(value:XML):Boolean
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns a copy of the given XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function copy():XML
+		{
+			/*
+				When the [[DeepCopy]] method of an XML object x is called, the following steps are taken:
+				1. Let y be a new XML object with y.[[Prototype]] = x.[[Prototype]], y.[[Class]] = x.[[Class]], y.[[Value]] = x.[[Value]], y.[[Name]] = x.[[Name]], y.[[Length]] = x.[[Length]]
+				2. For each ns in x.[[InScopeNamespaces]]
+				  a. Let ns2 be a new Namespace created as if by calling the constructor new Namespace(ns)
+				  b. Let y.[[InScopeNamespaces]] = y.[[InScopeNamespaces]] ∪ { ns2 }
+				3. Let y.[[Parent]] = null
+				4. For each a in x.[[Attributes]]
+				  a. Let b be the result of calling the [[DeepCopy]] method of a
+				  b. Let b.[[Parent]] = y
+				  c. Let y.[[Attributes]] = y.[[Attributes]] ∪ { b }
+				5. For i = 0 to x.[[Length]]-1
+				  a. Let c be the result of calling the [[DeepCopy]] method of x[i]
+				  b. Let y[i] = c
+				  c. Let c.[[Parent]] = y
+				6. Return y
+			*/
+			return null;
+		}
+		
+		/**
+		 * [static] Returns an object with the following properties set to the default values: ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * @return 
+		 * 
+		 */
+		static public function defaultSettings():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns all descendants (children, grandchildren, great-grandchildren, and so on) of the XML object that have the given name parameter.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function descendants(name:Object = *):XMLList
+		{
+			/*
+				When the [[Descendants]] method of an XML object x is called with property name P, the following steps are taken:
+				1. Let n = ToXMLName(P)
+				2. Let list be a new XMLList with list.[[TargetObject]] = null
+				3. If Type(n) is AttributeName
+				  a. For each a in x.[[Attributes]]
+				    i. If ((n.[[Name]].localName == "*") or (n.[[Name]].localName == a.[[Name]].localName)) and ((n.[[Name]].uri == null) or (n.[[Name]].uri == a.[[Name]].uri ))
+				      1. Call the [[Append]] method of list with argument a
+				4. For (k = 0 to x.[[Length]]-1)
+				  a. If ((n.localName == "*") or ((x[k].[[Class]] == "element") and (x[k].[[Name]].localName == n.localName))) and ((n.uri == null) or ((x[k].[[Class]] == "element") and (n.uri == x[k].[[Name]].uri)))
+				    i. Call the [[Append]] method of list with argument x[k]
+				  b. Let dq be the resultsof calling the [[Descendants]] method of x[k] with argument P
+				  c. If dq.[[Length]] > 0, call the [[Append]] method of list with argument dq
+				5. Return list
+			*/
+			return null;
+		}
+		
+		/**
+		 * Lists the elements of an XML object.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function elements(name:Object = *):XMLList
+		{
+			return null;
+		}
+
+		public function equals(xml:XML):Boolean
+		{
+			/*
+				When the [[Equals]] method of an XML object x is called with value V, the following steps are taken:
+				1. If Type(V) is not XML, return false
+				2. If x.[[Class]] is not equal to V.[[Class]], return false
+				3. If x.[[Name]] is not null
+				  a. If V.[[Name]] is null, return false
+				  b. If x.[[Name]].localName is not equal to V.[[Name]].localName, return false
+				  c. If x.[[Name]].uri is not equal to V.[[Name]].uri, return false
+				4. Else if V.[[Name]] is not null, return false
+				5. If x.[[Attributes]] does not contain the same number of items as V.[[Attributes]], return false
+				6. If x.[[Length]] is not equal to V.[[Length]], return false
+				7. If x.[[Value]] is not equal to y[[Value]], return false
+				8. For each a in x.[[Attributes]]
+				  a. If V.[[Attributes]] does not contain an attribute b, such that b.[[Name]].localName == a.[[Name]].localName, b.[[Name]].uri == a.[[Name]].uri and b.[[Value]] == a.[[Value]], return false
+				9. For i = 0 to x.[[Length]]-1
+				  a. Let r be the result of calling the [[Equals]] method of x[i] with argument V[i]
+				  b. If r == false, return false
+				10. Return true
+			*/
+		}
+		
+		/**
+		 * Checks to see whether the XML object contains complex content.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function hasComplexContent():Boolean
+		{
+			return false
+		}
+
+		public function hasOwnProperty():Boolean
+		{
+			/*
+				When the [[HasProperty]] method of an XML object x is called with property name P, the following steps are taken:
+				1. If ToString(ToUint32(P)) == P
+				  a. Return (P == "0")
+				2. Let n = ToXMLName(P)
+				3. If Type(n) is AttributeName
+				  a. For each a in x.[[Attributes]]
+				    i. If ((n.[[Name]].localName == "*") or (n.[[Name]].localName == a.[[Name]].localName)) and ((n.[[Name]].uri == null) or (n.[[Name]].uri == a.[[Name]].uri))
+				      1. Return true
+				  b. Return false
+				4. For (k = 0 to x.[[Length]]-1)
+				  a. If ((n.localName == "*") or ((x[k].[[Class]] == "element") and (x[k].[[Name]].localName == n.localName))) and ((n.uri == null) or (x[k].[[Class]] == "element") and (n.uri == x[k].[[Name]].uri)))
+				    i. Return true
+				5. Return false
+			*/
+		}
+				
+		/**
+		 * Checks to see whether the XML object contains simple content.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function hasSimpleContent():Boolean
+		{
+			return false;
+		}
+		
+		/**
+		 * Lists the namespaces for the XML object, based on the object's parent.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function inScopeNamespaces():Array
+		{
+			return null;
+		}
+		
+		/**
+		 * Inserts the given child2 parameter after the child1 parameter in this XML object and returns the resulting object.
+		 * 
+		 * @param child1
+		 * @param child2
+		 * @return 
+		 * 
+		 */
+		public function insertChildAfter(child1:Object, child2:Object):*
+		{
+			return null;
+		}
+		
+		/**
+		 * Inserts the given child2 parameter before the child1 parameter in this XML object and returns the resulting object.
+		 * 
+		 * @param child1
+		 * @param child2
+		 * @return 
+		 * 
+		 */
+		public function insertChildBefore(child1:Object, child2:Object):*
+		{
+			return null;
+		}
+		
+		/**
+		 * For XML objects, this method always returns the integer 1.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function length():int
+		{
+			return 1;
+		}
+		
+		/**
+		 * Gives the local name portion of the qualified name of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function localName():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * Gives the qualified name for the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function name():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * If no parameter is provided, gives the namespace associated with the qualified name of this XML object.
+		 * 
+		 * @param prefix
+		 * @return 
+		 * 
+		 */
+		public function namespace(prefix:String = null):*
+		{
+			return null;
+		}
+		
+		/**
+		 * Lists namespace declarations associated with the XML object in the context of its parent.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function namespaceDeclarations():Array
+		{
+			return null;
+		}
+		
+		private var _nodeKind:String;
+		/**
+		 * Specifies the type of node: text, comment, processing-instruction, attribute, or element.
+		 * @return 
+		 * 
+		 */
+		public function nodeKind():String
+		{
+			return null;
+		}
+		
+		/**
+		 * For the XML object and all descendant XML objects, merges adjacent text nodes and eliminates empty text nodes.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function normalize():XML
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns the parent of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function parent():*
+		{
+			return null;
+		}
+		
+		/**
+		 * Inserts the provided child object into the XML element before any existing XML properties for that element.
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function prependChild(child:XML):XML
+		{
+			child.setDocument(_parentDocument);
+			child.setParent(this);
+			
+			_children.unshift(child);
+			if(_node.childNodes.length)
+				_node.insertBefore(child.getNode(), _node.childNodes[0]);
+			else
+				_node.appendChild(child.getNode());
+			
+			return child;
+		}
+		
+		/**
+		 * If a name parameter is provided, lists all the children of the XML object that contain processing instructions with that name.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function processingInstructions(name:String = "*"):XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Removes the given chid for this object and returns the removed child.
+		 * 
+		 * @param child
+		 * @return 
+		 * 
+		 */
+		public function removeChild(child:XML):Boolean
+		{
+			/*
+				When the [[Delete]] method of an XML object x is called with property name P, the following steps are taken:
+				1. If ToString(ToUint32(P)) == P, throw a TypeError exception
+				NOTE this operation is reserved for future versions of E4X.
+				2. Let n = ToXMLName(P)
+				3. If Type(n) is AttributeName
+				  a. For each a in x.[[Attributes]]
+				    i. If ((n.[[Name]].localName == "*") or (n.[[Name]].localName == a.[[Name]].localName)) and ((n.[[Name]].uri == null) or (n.[[Name]].uri == a.[[Name]].uri))
+				      1. Let a.[[Parent]] = null
+				      2. Remove the attribute a from x.[[Attributes]]
+				  b. Return true
+				4. Let dp = 0
+				5. For q = 0 to x.[[Length]]-1
+				  a. If ((n.localName == "*") or (x[q].[[Class]] == "element" and x[q].[[Name]].localName == n.localName)) and ((n.uri == null) or (x[q].[[Class]] == “element” and n.uri == x[q].[[Name]].uri ))
+				    i. Let x[q].[[Parent]] = null
+				    ii. Remove the property with the name ToString(q) from x
+				    iii. Let dp = dp + 1
+				  b. Else
+				    i. If dp > 0, rename property ToString(q) of x to ToString(q – dp)
+				6. Let x.[[Length]] = x.[[Length]] - dp
+				7. Return true.
+			*/
+			child.setParent(null);
+			
+			var removed:XML;
+			var idx:int = child.childIndex;
+			removed = _children.splice(idx,1);
+			var n:Element = removed.getNode();
+			n.parentElement.removeChild(n);
+			return removed;
+		}
+
+		public function removeChildAt(index:int):void
+		{
+			/*
+				When the [[DeleteByIndex]] method of an XML object x is called with property name P, the following steps are taken:
+				1. Let i = ToUint32(P)
+				2. If ToString(i) == P
+				  a. If i is less than x.[[Length]]
+				    i. If x has a property with name P
+				      1. Let x[P].[[Parent]] = null
+				      2. Remove the property with the name P from x
+				    ii. For q = i+1 to x.[[Length]]-1
+				      1. Rename property ToString(q) of x to ToString(q – 1)
+				    iii. Let x.[[Length]] = x.[[Length]] – 1
+				  b. Return true
+				3. Else throw a TypeError exception
+			*/
+		}
+
+		/**
+		 * Removes the given namespace for this object and all descendants.
+		 * 
+		 * @param ns
+		 * @return 
+		 * 
+		 */
+		public function removeNamespace(ns:Namespace):XML
+		{
+			return null;
+		}
+		
+		/**
+		 * Replaces the properties specified by the propertyName parameter with the given value parameter.
+		 * 
+		 * @param propertyName
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function replace(propertyName:Object, value:XML):XML
+		{
+			/*
+				When the [[Replace]] method of an XML object x is called with property name P and value V, the following steps are taken:
+				1. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", "attribute"}, return
+				2. Let i = ToUint32(P)
+				3. If (ToString(i) is not equal to P), throw a TypeError exception
+				4. If i is greater than or equal to x.[[Length]],
+				  a. Let P = ToString(x.[[Length]])
+				  b. Let x.[[Length]] = x.[[Length]] + 1
+				5. If Type(V) is XML and V.[[Class]] ∈ {"element", "comment", "processing-instruction", "text"}
+				  a. If V.[[Class]] is “element” and (V is x or an ancestor of x) throw an Error exception
+				  b. Let V.[[Parent]] = x
+				  c. If x has a property with name P
+				    i. Let x[P].[[Parent]] = null
+				  d. Let x[P] = V
+				6. Else if Type(V) is XMLList
+				  a. Call the [[DeleteByIndex]] method of x with argument P
+				  b. Call the [[Insert]] method of x with arguments P and V
+				7. Else
+				  a. Let s = ToString(V)
+				  b. Create a new XML object t with t.[[Class]] = "text", t.[[Parent]] = x and t.[[Value]] = s
+				  c. If x has a property with name P
+				    i. Let x[P].[[Parent]] = null
+				  d. Let the value of property P of x be t
+				8. Return			
+			*/
+			return null;
+		}
+
+		/**
+		 * Replaces the child properties of the XML object with the specified name with the specified XML or XMLList.
+		 * This is primarily used to support dot notation assignment of XML.
+		 * 
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function setChild(elementName:*, elements:Object):void
+		{
+			
+			/*
+			 * 
+			1. If ToString(ToUint32(P)) == P, throw a TypeError exception NOTE this operation is reserved for future versions of E4X.
+			2. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", "attribute"}, return
+			3. If (Type(V) ∉ {XML, XMLList}) or (V.[[Class]] ∈ {"text", "attribute"})
+			  a. Let c = ToString(V)
+			4. Else
+			  a. Let c be the result of calling the [[DeepCopy]] method of V
+			5. Let n = ToXMLName(P)
+			6. If Type(n) is AttributeName
+			  a. Call the function isXMLName (section 13.1.2.1) with argument n.[[Name]] and if the result is false, return
+			  b. If Type(c) is XMLList
+			    i. If c.[[Length]] == 0, let c be the empty string
+			    ii. Else
+			      1. Let s = ToString(c[0])
+			      2. For i = 1 to c.[[Length]]-1
+			        a. Let s be the result of concatenating s, the string " " (space) and ToString(c[i])
+			      3. Let c = s
+			  c. Else
+			    i. Let c = ToString(c)
+			  d. Let a = null
+			  e. For each j in x.[[Attributes]]
+			    i. If (n.[[Name]].localName == j.[[Name]].localName) and ((n.[[Name]].uri == null) or (n.[[Name]].uri == j.[[Name]].uri))
+			      1. If (a == null), a = j
+			      2. Else call the [[Delete]] method of x with argument j.[[Name]]
+			  f. If a == null
+			    i. If n.[[Name]].uri == null
+			      1. Let nons be a new Namespace created as if by calling the constructor new Namespace()
+			      2. Let name be a new QName created as if by calling the constructor new QName(nons, n.[[Name]])
+			    ii. Else
+			      1. Let name be a new QName created as if by calling the constructor new QName(n.[[Name]])
+			    iii. Create a new XML object a with a.[[Name]] = name, a.[[Class]] == "attribute" and a.[[Parent]] = x
+			    iv. Let x.[[Attributes]] = x.[[Attributes]] ∪ { a }
+			    v. Let ns be the result of calling the [[GetNamespace]] method of name with no arguments
+			    vi. Call the [[AddInScopeNamespace]] method of x with argument ns
+			  g. Let a.[[Value]] = c
+			  h. Return
+			7. Let isValidName be the result of calling the function isXMLName (section 13.1.2.1) with argument n
+			8. If isValidName is false and n.localName is not equal to the string "*", return
+			9. Let i = undefined
+			10. Let primitiveAssign = (Type(c) ∉ {XML, XMLList}) and (n.localName is not equal to the string "*")
+			11. For (k = x.[[Length]]-1 downto 0)
+			  a. If ((n.localName == "*") or ((x[k].[[Class]] == "element") and (x[k].[[Name]].localName==n.localName))) and ((n.uri == null) or ((x[k].[[Class]] == “element”) and (n.uri == x[k].[[Name]].uri )))
+			    i. If (i is not undefined), call the [[DeleteByIndex]] property of x with argument ToString(i)
+			    ii. Let i = k
+			12. If i == undefined
+			  a. Let i = x.[[Length]]
+			  b. If (primitiveAssign == true)
+			    i. If (n.uri == null)
+			      1. Let name be a new QName created as if by calling the constructor new QName(GetDefaultNamespace(), n)
+			    ii. Else
+			      1. Let name be a new QName created as if by calling the constructor new QName(n)
+			    iii. Create a new XML object y with y.[[Name]] = name, y.[[Class]] = "element" and y.[[Parent]] = x
+			    iv. Let ns be the result of calling [[GetNamespace]] on name with no arguments
+			    v. Call the [[Replace]] method of x with arguments ToString(i) and y
+			    vi. Call [[AddInScopeNamespace]] on y with argument ns
+			13. If (primitiveAssign == true)
+			  a. Delete all the properties of the XML object x[i]
+			  b. Let s = ToString(c)
+			  c. If s is not the empty string, call the [[Replace]] method of x[i] with arguments "0" and s
+			14. Else
+			  a. Call the [[Replace]] method of x with arguments ToString(i) and c
+			15. Return
+			*/
+			var i:int;
+			var len:int;
+			var chld:XML;
+			
+			if(elements is XML)
+			{
+				var list:XMLList = new XMLList();
+				list[0] = elements;
+				elements = list;
+			}
+			if(elements is XMLList)
+			{
+				var chldrn:XMLList = this.child(elementName);
+				var childIdx:int = children().length() -1;
+				if(chldrn.length())
+					childIdx = chldrn[0].childIndex();
+				
+				len = chldrn.length() -1;
+				for (i= len; i >= 0;  i--)
+				{
+					// remove the nodes
+					// remove the children
+					// adjust the childIndexes
+				}
+				var curChild = _children[childIdx];
+				// Now add them in.
+				for each(chld in elements)
+				{
+				
+					if(!curChild)
+					{
+						curChild = appendChild(chld);
+					}
+					else {
+						curChild = insertChildAfter(curChild, chld);
+					}
+				}
+			}
+			//what to do if it's not XML or XMLList? Throw an error? Ignore?
+			
+		}
+
+		/**
+		 * Replaces the child properties of the XML object with the specified set of XML properties, provided in the value parameter.
+		 * 
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function setChildren(value:Object):XML
+		{
+			if(value is XML)
+			{
+				var list:XMLList = new XMLList();
+				list[0] = value;
+				value = list;
+			}
+			if(elements is XMLList)
+			{
+				// remove all existing elements
+				var chldrn:XMLList = this.child(elementName);
+				var childIdx:int = children().length() -1;
+				if(chldrn.length())
+					childIdx = chldrn[0].childIndex();
+				
+				len = chldrn.length() -1;
+				for (i= len; i >= 0;  i--)
+				{
+					// remove the nodes
+					// remove the children
+					// adjust the childIndexes
+				}
+				var curChild = _children[childIdx];
+				// Now add them in.
+				for each(chld in elements)
+				{
+					
+					if(!curChild)
+					{
+						curChild = appendChild(chld);
+					}
+					else {
+						curChild = insertChildAfter(curChild, chld);
+					}
+				}
+			}
+
+			return this;
+		}
+		
+		/**
+		 * Changes the local name of the XML object to the given name parameter.
+		 * 
+		 * @param name
+		 * 
+		 */
+		public function setLocalName(name:String):void
+		{
+			
+		}
+		
+		/**
+		 * Sets the name of the XML object to the given qualified name or attribute name.
+		 * 
+		 * @param name
+		 * 
+		 */
+		public function setName(name:String):void
+		{
+			
+		}
+		
+		/**
+		 * Sets the namespace associated with the XML object.
+		 * 
+		 * @param ns
+		 * 
+		 */
+		public function setNamespace(ns:Namespace):void
+		{
+			
+		}
+		
+		public function setParent(parent:XML):void
+		{
+			_parentXML = parent;
+		}
+		
+		/**
+		 * [static] Sets values for the following XML properties: ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * @param rest
+		 * 
+		 */
+		static public function setSettings(... rest):void
+		{
+
+		}
+		
+		/**
+		 * [static] Retrieves the following properties: ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * 
+		 * @return 
+		 * 
+		 */
+		static public function settings():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns an XMLList object of all XML properties of the XML object that represent XML text nodes.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function text():XMLList
+		{
+			return null;
+		}
+		
+		/**
+		 * Provides an overridable method for customizing the JSON encoding of values in an XML object.
+		 * 
+		 * @param k
+		 * @return 
+		 * 
+		 */
+		public function toJSON(k:String):*
+		{
+			return this.name();
+		}
+		
+		/**
+		 * Returns a string representation of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toString():String
+		{
+			// text, comment, processing-instruction, attribute, or element
+			if(_nodeKind == "text" || _nodeKind == "attribute")
+				return _value;
+			if(_nodeKind == "comment")
+				return "";
+			if(_nodeKind == "processing-instruction")
+				return "";
+			return toXMLString();
+		}
+		
+		/**
+		 * Returns a string representation of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toXMLString():String
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function valueOf():XML
+		{
+			return this;
+		}
+		
+		private function removeAllNodeChildren():void
+		{
+			var lastChild = _node.lastChild;
+			while(lastChild)
+			{
+				_node.removeChild(lastChild);
+				lastChild = _node.lastChild;
+			}
+		}
+	}
+}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/XMLClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XMLClasses.as b/frameworks/projects/XML/as/src/XMLClasses.as
new file mode 100644
index 0000000..6a91d82
--- /dev/null
+++ b/frameworks/projects/XML/as/src/XMLClasses.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package {
+
+/**
+ *  @private
+ *  This class is used to link additional classes into rpc.swc
+ *  beyond those that are found by dependency analysis starting
+ *  from the classes specified in manifest.xml.
+ */
+internal class XMLClasses
+{
+	COMPILE::JS
+	{
+		import XML; XML;
+		import XMLList; XMLList;
+		import QName; QName;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/XMLList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XMLList.as b/frameworks/projects/XML/as/src/XMLList.as
new file mode 100644
index 0000000..f1dd61d
--- /dev/null
+++ b/frameworks/projects/XML/as/src/XMLList.as
@@ -0,0 +1,611 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+COMPILE::JS
+{
+package
+{
+	public class XMLList
+	{
+		public function XMLList()
+		{
+			addIndex(0);
+		}
+		private var _xmlArray:Array = [];
+		/*
+			9.2.1.2 [[Put]] (P, V)
+			Overview
+			The XMLList type overrides the internal [[Put]] method defined by the Object type. The XMLList [[Put]] method is used to modify or replace an XML object within the XMLList and the context of its parent. In addition, when the XMLList contains a single property with an XML object, the [[Put]] method is used to modify, replace, and insert properties or XML attributes of that value by name. The input argument P identifies which portion of the XMLList and associated XML objects will be affected and may be a numeric property name, an unqualified name for an XML attribute (distinguished from XML valued property names by a leading “@” symbol) or set of XML elements, a QName for a set of XML elements, an AttributeName for a set of XML attributes or the properties wildcard “*”. When the input argument P is an unqualified XML element name, it identifies XML elements in the default namespace. When the input argument P is an unqualified XML attribute name, it identifies XML attributes
  in no namespace. The input argument V may be a value of type XML, XMLList or any value that can be converted to a String with ToString().
+			NOTE Unlike the internal Object [[Put]] method, the internal XMLList [[Put]] method is never used for modifying the set of methods associated with XMLList objects.
+			Semantics
+			When the [[Put]] method of an XMLList object x is called with property name P and value V, the following steps are taken:
+			1. Let i = ToUint32(P)
+			2. If ToString(i) == P
+			  a. If x.[[TargetObject]] is not null
+			    i. Let r be the result of calling the [[ResolveValue]] method of x.[[TargetObject]]
+			    ii. If r == null, return
+			  b. Else let r = null
+			  c. If i is greater than or equal to x.[[Length]]
+			    i. If Type(r) is XMLList
+			      1. If r.[[Length]] is not equal to 1, return
+			      2. Else let r = r[0]
+			    ii. If r.[[Class]] is not equal to "element", return
+			    iii. Create a new XML object y with y.[[Parent]] = r, y.[[Name]] = x.[[TargetProperty]], y.[[Attributes]] = {}, y.[[Length]] = 0
+			    iv. If Type(x.[[TargetProperty]]) is AttributeName
+			      1. Let attributeExists be the result of calling the [[Get]] method of r with argument y.[[Name]]
+			      2. If (attributeExists.[[Length]] > 0), return
+			      3. Let y.[[Class]] = "attribute"
+			    v. Else if x.[[TargetProperty]] == null or x.[[TargetProperty]].localName == "*"
+			      1. Let y.[[Name]] = null
+			      2. Let y.[[Class]] = "text"
+			    vi. Else let y.[[Class]] = "element"
+			    vii. Let i = x.[[Length]]
+			    viii. If (y.[[Class]] is not equal to "attribute")
+			      1. If r is not null
+			        a. If (i > 0)
+			          i. Let j = 0
+			          ii. While (j < r.[[Length]]-1) and (r[j] is not the same object as x[i-1])
+			            1. Let j = j + 1
+			        b. Else
+			          i. Let j = r.[[Length]]-1
+			        c. Call the [[Insert]] method of r with arguments ToString(j+1) and y
+			      2. If Type(V) is XML, let y.[[Name]] = V.[[Name]]
+			      3. Else if Type(V) is XMLList, let y.[[Name]] = V.[[TargetProperty]]
+			    ix. Call the [[Append]] method of x with argument y
+			  d. If (Type(V) ∉ {XML, XMLList}) or (V.[[Class]] ∈ {"text", "attribute"}), let V = ToString(V)
+			  e. If x[i].[[Class]] == "attribute"
+			    i. Let z = ToAttributeName(x[i].[[Name]])
+			    ii. Call the [[Put]] method of x[i].[[Parent]] with arguments z and V
+			    iii. Let attr be the result of calling [[Get]] on x[i].[[Parent]] with argument z
+			    iv. Let x[i] = attr[0]
+			  f. Else if Type(V) is XMLList
+			    i. Create a shallow copy c of V
+			    ii. Let parent = x[i].[[Parent]]
+			    iii. If parent is not null
+			      1. Let q be the property of parent, such that parent[q] is the same object as x[i]
+			      2. Call the [[Replace]] method of parent with arguments q and c
+			      3. For j = 0 to c.[[Length]]-1
+			        a. Let c[j] = parent[ToUint32(q)+j]
+			    iv. If c.[[Length]] == 0
+			      1. For j = i + 1 to x.[[Length]] – 1, rename property j of x to ToString(j-1)
+			    v. Else
+			      1. For j = x.[[Length]]-1 downto i + 1, rename property j of x to ToString(j + c.[[Length]] - 1)
+			    vi. For j = 0 to c.[[Length]]-1, let x[i + j] = c[j]
+			    vii. Let x.[[Length]] = x.[[Length]] + c.[[Length]] - 1
+			  g. Else if (Type(V) is XML) or (x[i].[[Class]] ∈ {"text", "comment", "processing-instruction"})
+			    i. Let parent = x[i].[[Parent]]
+			    ii. If parent is not null
+			      1. Let q be the property of parent, such that parent[q] is the same object as x[i]
+			      2. Call the [[Replace]] method of parent with arguments q and V
+			      3. Let V = parent[q]
+			    iii. If Type(V) is String
+			      1. Create a new XML object t with t.[[Class]] = "text", t.[[Parent]] = x and t.[[Value]] = V
+			      2. Let x[i] = t
+			    iv. Else
+			      1. Let x[i] = V
+			  h. Else
+			    i. Call the [[Put]] method of x[i] with arguments "*" and V
+			3. Else if x.[[Length]] is less than or equal to 1
+			  a. If x.[[Length]] == 0
+			    i. Let r be the result of calling the [[ResolveValue]] method of x
+			    ii. If (r == null) or (r.[[Length]] is not equal to 1), return
+			    iii. Call the [[Append]] method of x with argument r
+			  b. Call the [[Put]] method of x[0] with arguments P and V
+			4. Return
+		*/
+		private function addIndex(idx:int):void
+		{
+			var idxStr:String = "" + idx;
+			Object.defineProperty(this,idxStr,
+				{
+					get: function() { return _xmlArray[idx]; },
+					set: function(newValue:*) {
+						var i:int;
+						if(newValue is XML)
+						{
+							_xmlArray[idx] = newValue;
+						}
+						else if(newValue is XMLList)
+						{
+							var len:int = newValue.length();
+							for(i=0;i<len;i++)
+							{
+								// replace the first one and add each additonal one.
+								if(i==0)
+									_xmlArray[idx] = newValue[i];
+								else
+									_xmlArray.splice(idx+i,0,newValue[i]);
+							}
+						}
+						// add indexes as necessary
+						while(idx++ < _xmlArray.length)
+						{
+							if(!this.hasOwnProperty(idx))
+								addIndex(idx);
+						}
+					},
+					enumerable: true,
+					configurable: true
+				}
+			);
+		}
+		
+		public function appendChild(child:XML):void
+		{
+			addIndex(_xmlArray.length);
+			_xmlArray[_xmlArray.length] = child;
+		}
+		
+		/**
+		 * Calls the attribute() method of each XML object and returns an XMLList object of the results.
+		 * 
+		 * @param attributeName
+		 * @return 
+		 * 
+		 */
+		public function attribute(attributeName:*):XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].attribute(attributeName);
+				if(list.length())
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		/**
+		 * Calls the attributes() method of each XML object and returns an XMLList object of attributes for each XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function attributes():XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].attributes();
+				if(list.length())
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		/**
+		 * Calls the child() method of each XML object and returns an XMLList object that contains the results in order.
+		 * 
+		 * @param propertyName
+		 * @return 
+		 * 
+		 */
+		public function child(propertyName:Object):XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].child(propertyName);
+				if(list.length())
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		/**
+		 * Calls the children() method of each XML object and returns an XMLList object that contains the results.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function children():XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].children();
+				if(list.length)
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		
+		/**
+		 * Calls the comments() method of each XML object and returns an XMLList of comments.
+		 * @return 
+		 * 
+		 */
+		public function comments():XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].comments();
+				if(list.length)
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		
+		public function concat(list:XMLList):XMLList
+		{
+			var retVal:XMLList = this.copy();
+			var item:XML;
+			for each(item in list)
+				retVal.appendChild(item);
+				
+			return retVal;
+		}
+		
+		/**
+		 * Checks whether the XMLList object contains an XML object that is equal to the given value parameter.
+		 * 
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function contains(value:XML):Boolean
+		{
+			
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				if(this[i].contains(value))
+					return true;
+			}
+			return false;
+		}
+		
+		/**
+		 * Returns a copy of the given XMLList object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function copy():XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+				retVal[i] = this[i].copy();
+			
+			return retVal;
+		}
+		
+		/**
+		 * Returns all descendants (children, grandchildren, great-grandchildren, and so on) of the XML object that have the given name parameter.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function descendants(name:Object = *):XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].descendants(name);
+				if(list.length())
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		
+		/**
+		 * Calls the elements() method of each XML object.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function elements(name:Object = *):XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].elements(name);
+				if(list.length())
+					retVal = retVal.concat(list);
+			}
+			return retVal;
+		}
+		
+		public function hasComplexContent():Boolean
+		{
+			//what to do with multiple nodes? If anything is complex, we return true.
+			if(this.length() == 0)
+				return false;
+			var len:int = this.length();
+			for (var i:int=1;i<len;i++)
+			{
+				if(this[i].hasComplexContent())
+					return true;
+			}
+			return false;
+		}
+
+		public function hasOwnProperty(propertyName:*):Boolean
+		{
+			/*
+				Overview
+				The XMLList type overrides the internal [[HasProperty]] method defined by the Object type. The XMLList [[HasProperty]] method is used to determine whether this XMLList object contains an XML element or attribute by its ordinal position or whether any of the objects contained in this XMLList object contains an XML element or attribute by its name. The input argument P may be a numeric property name, an unqualified name for an XML attribute (distinguished from the name of XML elements by a leading “@” symbol) or a set of XML elements, a QName for a set of XML elements, an AttributeName for a set of XML attributes, the properties wildcard “*” or the attributes wildcard “@*”. When the input argument P is an unqualified XML element name, it identifies XML elements in the default namespace. When the input argument P is an unqualified XML attribute name, it identifies XML attributes in no namespace.
+				Semantics
+				When the [[HasProperty]] method of an XMLList object x is called with property name P, the following steps are taken:
+				1. If ToString(ToUint32(P)) == P
+				a. Return (ToUint32(P) < x.[[Length]])
+				2. For i = 0 to x.[[Length]]-1
+				a. If x[i].[[Class]] == "element" and the result of calling the [[HasProperty]] method of x[i] with argument P == true, return true
+				3. Return false			
+			*/
+			if(parseInt(propertyName,10).toString() == propertyName)
+			{
+				return parseInt(propertyName,10) < this.length();
+			}
+			var len:int = this.length();
+			for (var i:int=1;i<len;i++)
+			{
+				if(this[i].hasOwnProperty(propertyName))
+					return true;
+			}
+			return false;
+		}
+		
+		/**
+		 * Checks whether the XMLList object contains simple content.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function hasSimpleContent():Boolean
+		{
+			//what to do with multiple nodes? If anything is complex, we return false.
+			if(this.length() == 0)
+				return true;
+			var len:int = this.length();
+			for (var i:int=1;i<len;i++)
+			{
+				if(this[i].hasComplexContent())
+					return false;
+			}
+			return true;
+		}
+		
+		/**
+		 * Returns the number of items in the XMLList.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function length():int
+		{
+			return _xmlArray.length;
+		}
+		
+		/**
+		 * Merges adjacent text nodes and eliminates empty text nodes for each of the following:
+		 * all text nodes in the XMLList, all the XML objects contained in the XMLList, and the descendants of all the XML objects in the XMLList.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function normalize():XMLList
+		{
+			//TODO: Figure out what to do here.
+		}
+		
+		/**
+		 * Returns the parent of the XMLList object if all items in the XMLList object have the same parent.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function parent():Object
+		{
+			if(this.length() == 0)
+				return null;
+			var retVal = this[0].parent;
+			var len:int = this.length();
+			for (var i:int=1;i<len;i++)
+			{
+				if(this[i].parent != retVal)
+					return null;
+			}
+			return retVal;
+		}
+		
+		/**
+		 * If a name parameter is provided, lists all the children of the XMLList object that contain processing instructions with that name.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function processingInstructions(name:String = "*"):XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			if(!name)
+				return retVal;
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				if(this[i].nodeKind() != "processing-instruction")
+					continue;
+				if(name == "*")
+				{
+					retVal.appendChild(this[i]);
+				}
+				else if(name == this[i].localName)
+					retVal.appendChild(this[i]);
+			}
+			return retVal;
+		}
+
+		public function removeChild(child:*):void
+		{
+			var i:int;
+			var len:int;
+			if(child is XMLList)
+			{
+				len = child.length();
+				for(i=0;i<len;i++)
+				{
+					removeChild(child[i]);
+				}
+			}
+			else if(child is XML)
+			{
+				len = _xmlArray.length-1;
+				for(i=len; i >= 0; i--)
+				{
+					if(_xmlArray[i] == child)
+					{
+						_xmlArray.splice(i,1);
+					}
+				}
+			}
+		}
+
+		public function removeChildAt(idx:int):void
+		{
+			if(idx >= 0 && idx < _xmlArray.length)
+				_xmlArray.splice(idx,1);
+		}
+
+		private var _targetObject:*;
+		/**
+		 * @private
+		 * 
+		 * Internally used to store an associated XML or XMLList object which will be effected by operations
+		 */
+		public function set targetObject(value:*):void
+		{
+			_targetObject = value;
+		}
+		public function get targetObject():*
+		{
+			return _targetObject;
+		}
+
+		private var _targetProperty:*;
+		/**
+		 * @private
+		 * 
+		 * The name of a property that may be created in the targetObject when objects are added to an empty XMLList.
+		 */
+		public function set targetProperty(value:*):void
+		{
+			_targetProperty = value;
+		}
+		public function get targetProperty():*
+		{
+			return _targetProperty;
+		}
+		
+		/**
+		 * Calls the text() method of each XML object and returns an XMLList object that contains the results.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function text():XMLList
+		{
+			var retVal:XMLList = new XMLList();
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var list:XMLList = this[i].text();
+				if(list.length())
+					retVal.concat(list);
+			}
+			return retVal;
+		}
+
+		/**
+		 * Returns the string representation of this object, formatted according to locale-specific conventions.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toLocaleString():String
+		{
+			var retVal:Array = [];
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var str:String = this[i].toLocaleString();
+				if(str)
+					retVal.push(str);
+			}
+			return retVal.join("");
+		}
+		
+		/**
+		 * Returns a string representation of all the XML objects in an XMLList object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toString():String
+		{
+			var retVal:Array = [];
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var str:String = this[i].toString();
+				if(str)
+					retVal.push(str);
+			}
+			return retVal.join("");
+		}
+		
+		/**
+		 * Returns a string representation of all the XML objects in an XMLList object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toXMLString():String
+		{
+			var retVal:Array = [];
+			var len:int = this.length();
+			for (var i:int=0;i<len;i++)
+			{
+				var str:String = this[i].toXMLString();
+				if(str)
+					retVal.push(str);
+			}
+			return retVal.join("");
+		}
+		
+		/**
+		 * Returns the XMLList object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function valueOf():XMLList
+		{
+			return this;
+		}
+	}
+}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/IJXON.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/IJXON.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/IJXON.as
new file mode 100644
index 0000000..14b85ea
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/IJXON.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public interface IJXON
+	{
+		function isText():Boolean;
+		function toString():String;
+		function children():JXONList;
+		function attributes():JXONList;
+		function get nodeKind():String
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXON.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXON.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXON.as
new file mode 100644
index 0000000..c4ae7d8
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXON.as
@@ -0,0 +1,544 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXON implements IJXON
+	{
+		public function JXON(xml:String)
+		{
+			
+		}
+		public function isText():Boolean
+		{
+			return false;
+		}
+		
+
+		private var _appliedNamespace:JXONNamespace;
+
+		public function get appliedNamespace():JXONNamespace
+		{
+			return _appliedNamespace;
+		}
+
+		public function set appliedNamespace(value:JXONNamespace):void
+		{
+			_appliedNamespace = value;
+		}
+		
+		private var _namespaces:Array;
+		private var _uriLookup:Object;
+		private function get uriLookup():Object{
+			if(!_uriLookup)
+				_uriLookup = {};
+			return _uriLookup;
+		}
+		private var _prefixLookup:Object
+		private function get prefixLookup():Object{
+			if(!_prefixLookup)
+				_prefixLookup = {};
+			return _prefixLookup;
+		}
+
+		/**
+		 * Adds a namespace to the set of in-scope namespaces for the XML object.
+		 *  
+		 * @param ns
+		 * 
+		 */
+		public function addNamespace(ns:JXONNamespace):void
+		{
+			//throw an error?
+			if(prefixLookup[ns.prefix])
+				return;
+			
+			if(uriLookup[ns.uri])
+				return;
+			
+			prefixLookup[ns.prefix] = ns;
+			uriLookup[ns.uri] = ns;
+			_namespaces.push(ns);
+		}
+		
+		/**
+		 * Appends the given child to the end of the XML object's properties.
+		 *  
+		 * @param child
+		 * @return 
+		 * 
+		 */
+		public function appendChild(child:IJXON):IJXON
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns the XML value of the attribute that has the name matching the attributeName parameter.
+		 * 
+		 * @param attributeName
+		 * @return 
+		 * 
+		 */
+		public function attribute(attributeName:*):JXONList
+		{
+			return null;
+		}
+		
+		private var _attributes:Array;
+
+		/**
+		 * Returns a list of attribute values for the given XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get attributes():JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Lists the children of an XML object with a specific property name.
+		 *  
+		 * @param propertyName
+		 * @return 
+		 * 
+		 */
+		public function child(propertyName:Object):JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Identifies the zero-indexed position of this XML object within the context of its parent.
+		 *  
+		 * @return 
+		 * 
+		 */
+		public function childIndex():int
+		{
+			//TODO
+			return 0;
+		}
+		
+		private var _children:JXONList;
+		
+		/**
+		 * Lists the children of the XML object in the sequence in which they appear.
+		 *  
+		 * @return 
+		 * 
+		 */
+		public function get children():JXONList
+		{
+			return _children;
+		}
+		
+		//comments():XMLList include?
+		//Lists the properties of the XML object that contain XML comments.
+		
+		/**
+		 * Compares the XML object against the given value parameter.
+		 *  
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function contains(value:JXON):Boolean
+		{
+			//TODO
+			return true;
+		}
+		
+		/**
+		 * Returns a copy of the given XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function copy():JXON
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns an object with the following properties set to the default values: 
+		 * ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * 
+		 * @return 
+		 * 
+		 */
+		static public function defaultSettings():Object
+		{
+			return {};
+		}
+		
+		/**
+		 * Returns all descendants (children, grandchildren, great-grandchildren, and so on) of the XML object that have the given name parameter.
+		 *  
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function descendants(name:Object = null):JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Lists the elements of an XML object.
+		 *  
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function elements(name:Object = null):JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * filters XML content based on logic in the callback function
+		 * @param callback
+		 * @param thisObject
+		 * @return 
+		 * 
+		 */
+		public function filter(callback:Function, thisObject:* = null):JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Checks to see whether the XML object contains complex content.
+		 *  
+		 * @return 
+		 * 
+		 */
+		public function hasComplexContent():Boolean
+		{
+			return true;
+		}
+		
+		/**
+		 * Checks to see whether the XML object contains simple content.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function hasSimpleContent():Boolean
+		{
+			return true;
+		}
+		
+		/**
+		 * Lists the namespaces for the XML object, based on the object's parent.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function inScopeNamespaces():Array
+		{
+			return null;
+		}
+		
+		/**
+		 * Inserts the given child2 parameter after the child1 parameter in this XML object and returns the resulting object.
+		 * 
+		 * @param child1
+		 * @param child2
+		 * @return 
+		 * 
+		 */
+		public function insertChildAfter(child1:Object, child2:Object):*
+		{
+			
+		}
+		
+		/**
+		 * Inserts the given child2 parameter before the child1 parameter in this XML object and returns the resulting object.
+		 * 
+		 * @param child1
+		 * @param child2
+		 * @return 
+		 * 
+		 */
+		public function insertChildBefore(child1:Object, child2:Object):*
+		{
+			
+		}
+		
+		/**
+		 * For XML objects, this method always returns the integer 1.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get length():int
+		{
+			return 1;
+		}
+		
+		/**
+		 * Gives the local name portion of the qualified name of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get localName():Object
+		{
+			return null;
+		}
+		/**
+		 * Changes the local name of the XML object to the given name parameter.
+		 * 
+		 * @param name
+		 * 
+		 */
+		public function set localName(name:String):void
+		{
+			
+		}
+		/**
+		 * Gives the qualified name for the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get name():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * Sets the name of the XML object to the given qualified name or attribute name.
+		 * 
+		 * @param name
+		 * 
+		 */
+		public function set name(name:String):void
+		{
+			
+		}
+		
+		/**
+		 * If no parameter is provided, gives the namespace associated with the qualified name of this XML object.
+		 * @param prefix
+		 * @return 
+		 * 
+		 */
+		public function xmlNamespace(prefix:String = null):*
+		{
+			
+		}
+		
+		/**
+		 * Lists namespace declarations associated with the XML object in the context of its parent.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get namespaceDeclarations():Array
+		{
+			return null;
+		}
+		
+		/**
+		 * Specifies the type of node: text, comment, processing-instruction, attribute, or element.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get nodeKind():String
+		{
+			return "element";
+		}
+		
+		/**
+		 * For the XML object and all descendant XML objects, merges adjacent text nodes and eliminates empty text nodes.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function normalize():JXON
+		{
+			return null;
+		}
+		
+		private var _parent:*;
+
+		public function set parent(value:*):void
+		{
+			_parent = value;
+		}
+
+		/**
+		 * Returns the parent of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get parent():*
+		{
+			return _parent;
+		}
+		
+		/**
+		 * Inserts a copy of the provided child object into the XML element before any existing XML properties for that element.
+		 * 
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function prependChild(value:Object):JXON
+		{
+			return null;
+		}
+		
+		/**
+		 * If a name parameter is provided, lists all the children of the XML object that contain processing instructions with that name.
+		 * 
+		 * @param name
+		 * @return 
+		 * 
+		 */
+		public function processingInstructions(name:String = ""):JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Removes the given namespace for this object and all descendants.
+		 * 
+		 * @param ns
+		 * @return 
+		 * 
+		 */
+		public function removeNamespace(ns:Namespace):JXON
+		{
+			return null;
+		}
+		
+		/**
+		 * Replaces the properties specified by the propertyName parameter with the given value parameter.
+		 * 
+		 * @param propertyName
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function replace(propertyName:Object, value:JXON):JXON
+		{
+			return null;
+		}
+		
+		/**
+		 * Replaces the child properties of the XML object with the specified set of XML properties, provided in the value parameter.
+		 * 
+		 * @param value
+		 * @return 
+		 * 
+		 */
+		public function setChildren(value:JXONList):JXON
+		{
+			return null;
+		}
+		
+		
+		/**
+		 * Sets the namespace associated with the XML object.
+		 * 
+		 * @param ns
+		 * 
+		 */
+		public function setNamespace(ns:JXONNamespace):void
+		{
+			
+		}
+		
+		/**
+		 * Sets values for the following XML properties:
+		 * ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * 
+		 * @param rest
+		 * 
+		 */
+		static public function setSettings(... rest):void
+		{
+			
+		}
+		
+		/**
+		 * Retrieves the following properties:
+		 * ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting.
+		 * 
+		 * @return 
+		 * 
+		 */
+		static public function getSettings():Object
+		{
+			return null;
+		}
+		
+		/**
+		 * Returns an XMLNodeList object of all XML properties of the XML object that represent XML text nodes.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function get text():JXONList
+		{
+			return null;
+		}
+		
+		/**
+		 * Provides an overridable method for customizing the JSON encoding of values in an XML object.
+		 * 
+		 * @param k
+		 * @return 
+		 * 
+		 */
+		public function toJSON(k:String):*
+		{
+			
+		}
+		
+		/**
+		 * Returns a string representation of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toString():String
+		{
+			return "";
+		}
+		
+		/**
+		 * Returns a string representation of the XML object.
+		 * 
+		 * @return 
+		 * 
+		 */
+		public function toXMLString():String
+		{
+			return "";
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONAttribute.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONAttribute.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONAttribute.as
new file mode 100644
index 0000000..5ed9ce0
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONAttribute.as
@@ -0,0 +1,79 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONAttribute implements IJXON
+	{
+		public function JXONAttribute(name:String="",value:String="")
+		{
+			_name = name;
+			_value = value;
+		}
+		
+		private var _name:String;
+
+		public function get name():String
+		{
+			return _name;
+		}
+
+		public function set name(value:String):void
+		{
+			_name = value;
+		}
+		
+		private var _value:String;
+
+		public function get value():String
+		{
+			return _value;
+		}
+
+		public function set value(value:String):void
+		{
+			_value = value;
+		}
+
+
+		public function isText():Boolean
+		{
+			return false;
+		}
+		
+		public function toString():String
+		{
+			return null;
+		}
+		
+		public function children():JXONList
+		{
+			return null;
+		}
+		
+		public function attributes():JXONList
+		{
+			return null;
+		}
+		
+		public function get nodeKind():String
+		{
+			return "attribute";
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONComment.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONComment.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONComment.as
new file mode 100644
index 0000000..649cb5c
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONComment.as
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONComment implements IJXON
+	{
+		public function JXONComment()
+		{
+		}
+		
+		public function isText():Boolean
+		{
+			return false;
+		}
+		
+		public function toString():String
+		{
+			return null;
+		}
+		
+		public function children():JXONList
+		{
+			return null;
+		}
+		
+		public function attributes():JXONList
+		{
+			return null;
+		}
+		
+		public function get nodeKind():String
+		{
+			return "comment";
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONInstruction.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONInstruction.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONInstruction.as
new file mode 100644
index 0000000..27738d3
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONInstruction.as
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONInstruction implements IJXON
+	{
+		public function JXONInstruction()
+		{
+		}
+		
+		public function isText():Boolean
+		{
+			return false;
+		}
+		
+		public function toString():String
+		{
+			return null;
+		}
+		
+		public function children():JXONList
+		{
+			return null;
+		}
+		
+		public function attributes():JXONList
+		{
+			return null;
+		}
+		
+		public function get nodeKind():String
+		{
+			return "processing-instruction";
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONList.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONList.as
new file mode 100644
index 0000000..2fd1bd1
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONList.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONList extends Array
+	{
+		public function JXONList(...parameters)
+		{
+			super(parameters);
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONNamespace.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONNamespace.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONNamespace.as
new file mode 100644
index 0000000..23eb15e
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONNamespace.as
@@ -0,0 +1,67 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONNamespace
+	{
+		
+		/**
+		 * Constructor
+		 * 
+		 * @param prefix
+		 * @param uri
+		 * 
+		 *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.5.0
+		 * 
+		 */
+		public function JXONNamespace(prefix:String,uri:String)
+		{
+			_prefix = prefix;
+			_uri = uri;
+		}
+		
+		private var _prefix:String;
+
+		public function get prefix():String
+		{
+			return _prefix;
+		}
+
+		public function set prefix(value:String):void
+		{
+			_prefix = value;
+		}
+		
+		private var _uri:String;
+
+		public function get uri():String
+		{
+			return _uri;
+		}
+
+		public function set uri(value:String):void
+		{
+			_uri = value;
+		}
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a50de213/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONText.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONText.as b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONText.as
new file mode 100644
index 0000000..d108edc
--- /dev/null
+++ b/frameworks/projects/XML/as/src/org/apache/flex/core/xml/JXONText.as
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.core.xml
+{
+	public class JXONText implements IJXON
+	{
+		public function JXONText()
+		{
+		}
+		
+		public function isText():Boolean
+		{
+			return true;
+		}
+		
+		public function toString():String
+		{
+			return null;
+		}
+		
+		public function children():JXONList
+		{
+			return null;
+		}
+		
+		public function attributes():JXONList
+		{
+			return null;
+		}
+		
+		public function get nodeKind():String
+		{
+			return "text";
+		}
+	}
+}
\ No newline at end of file