Repository: flex-asjs Updated Branches: refs/heads/e4x 09c5c4fd2 -> dc52078ee
Added some more XML methods Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/dc52078e Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/dc52078e Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/dc52078e Branch: refs/heads/e4x Commit: dc52078ee510a2cb3e1fc1e15d9835ad5cb4b176 Parents: 09c5c4f Author: Harbs <[email protected]> Authored: Wed Feb 3 17:56:22 2016 +0200 Committer: Harbs <[email protected]> Committed: Wed Feb 3 17:56:22 2016 +0200 ---------------------------------------------------------------------- frameworks/projects/XML/as/src/QName.as | 10 ++ frameworks/projects/XML/as/src/XML.as | 147 ++++++++++++++++++++------- 2 files changed, 120 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/dc52078e/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 index a3a1244..d24b7a7 100644 --- a/frameworks/projects/XML/as/src/QName.as +++ b/frameworks/projects/XML/as/src/QName.as @@ -104,6 +104,16 @@ package { return this.uri == name.uri && this.prefix == name.prefix && this.localName == name.localName; } + public function matches(name:QName):Boolean + { + if(this.uri == "*" || name.uri == "*") + return this.localName == "*" || name.localName == "*" || this.localName == name.localName; + + if(this.localName == "*" || name.localName == "*") + return this.uri == name.uri; + + return this.uri == name.uri && this.localName == name.localName; + } private var _isAttribute:Boolean; public function get isAttribute():Boolean { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/dc52078e/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 index f1aa656..aad27ce 100644 --- a/frameworks/projects/XML/as/src/XML.as +++ b/frameworks/projects/XML/as/src/XML.as @@ -230,6 +230,57 @@ package return value.replace(/^\s+|\s+$/gm,''); } + /** + * [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 { + ignoreComments : true, + ignoreProcessingInstructions : true, + ignoreWhitespace : true, + prettyIndent : 2, + prettyPrinting : true + } + } + + /** + * [static] Sets values for the following XML properties: ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting. + * @param rest + * + */ + static public function setSettings(value:Object):void + { + if(!value) + return; + + ignoreComments = value.ignoreComments === undefined ? ignoreComments : value.ignoreComments; + ignoreProcessingInstructions = value.ignoreProcessingInstructions === undefined ? ignoreProcessingInstructions : value.ignoreProcessingInstructions; + ignoreWhitespace = value.ignoreWhitespace === undefined ? ignoreWhitespace : value.ignoreWhitespace; + prettyIndent = value.prettyIndent === undefined ? prettyIndent : value.prettyIndent; + prettyPrinting = value.prettyPrinting === undefined ? prettyPrinting : value.prettyPrinting; + } + + /** + * [static] Retrieves the following properties: ignoreComments, ignoreProcessingInstructions, ignoreWhitespace, prettyIndent, and prettyPrinting. + * + * @return + * + */ + static public function settings():Object + { + return { + ignoreComments : ignoreComments, + ignoreProcessingInstructions : ignoreProcessingInstructions, + ignoreWhitespace : ignoreWhitespace, + prettyIndent : prettyIndent, + prettyPrinting : prettyPrinting + } + } + + public function XML(xml:String = null) { if(xml != "") @@ -401,11 +452,14 @@ package public function attribute(attributeName:*):XMLList { var i:int; + if(attributeName == "*") + return attributes(); + attributeName = toAttributeName(attributeName); var list:XMLList = new XMLList(); for(i=0;i<_attributes.length;i++) { - if(_atributes[i].name().equals(attributeName)) + if(_atributes[i].name().matches(attributeName)) list.appendChild(_atributes[i]); } list.targetObject = this; @@ -421,7 +475,12 @@ package */ public function attributes():XMLList { - return null; + var list:XMLList = new XMLList(); + for(i=0;i<_attributes.length;i++) + list.appendChild(_atributes[i]); + + list.targetObject = this; + return list; } /** @@ -435,6 +494,7 @@ package { /* * + When the [[Get]] method of an XML object x is called with property name P, the following steps are taken: 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 @@ -450,7 +510,36 @@ package i. Call the [[Append]] method of list with argument x[k] 6. Return list */ - return null; + var i:int; + var list:XMLList = new XMLList(); + if(parseInt(name,10).toString() == propertyName) + { + if(propertyName != "0") + return undefined; + list.appendChild(this); + list.targetObject = this; + return list; + } + propertyName = toXMLName(propertyName); + if(propertyName.isAttribute) + { + for(i=0;i<_attributes.length;i++) + { + if(propertyName.matches(_attributes[i].name())) + list.append(_attributes[i]); + } + } + else + { + for(i=0;i<_children.length;i++) + { + if(propertyName.matches(_children[i].name())) + list.append(_children[i]); + } + } + list.targetObject = this; + list.targetProperty = propertyName; + return list; } /** @@ -475,7 +564,15 @@ package */ public function children():XMLList { - return null; + var list:XMLList = new XMLList(); + for(i=0;i<_children.length;i++) + { + //TODO filter out non-elements + if(propertyName.matches(_children[i].name())) + list.append(_children[i]); + } + list.targetObject = this; + return list; } /** @@ -486,7 +583,14 @@ package */ public function comments():XMLList { - return null; + var list:XMLList = new XMLList(); + for(i=0;i<_children.length;i++) + { + if(_children[i].nodeKind() == "comment" && propertyName.matches(_children[i].name())) + list.append(_children[i]); + } + list.targetObject = this; + return list; } /** @@ -498,7 +602,7 @@ package */ public function contains(value:XML):Boolean { - return null; + return this.equals(value); } /** @@ -530,16 +634,6 @@ package } /** - * [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 @@ -1246,27 +1340,6 @@ package } /** - * [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
