Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/** Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.** Licensed under the Apache License, Version 2.0 (the "License").* You may not use this file except in compliance with the License.* A copy of the License is located at** http://aws.amazon.com/apache2.0** or in the "license" file accompanying this file. This file 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.*//*%******************************************************************************************%*/// CLASS/*** Wraps the underlying `SimpleXMLIterator` class with enhancements for rapidly traversing the DOM tree,* converting types, and comparisons.** @version 2012.01.17* @license See the included NOTICE.md file for more information.* @copyright See the included NOTICE.md file for more information.* @link http://aws.amazon.com/php/ PHP Developer Center* @link http://php.net/SimpleXML SimpleXML*/class CFSimpleXML extends SimpleXMLIterator{/*** Stores the namespace name to use in XPath queries.*/public $xml_ns;/*** Stores the namespace URI to use in XPath queries.*/public $xml_ns_url;/*** Catches requests made to methods that don't exist. Specifically, looks for child nodes via XPath.** @param string $name (Required) The name of the method.* @param array $arguments (Required) The arguments passed to the method.* @return mixed Either an array of matches, or a single <CFSimpleXML> element.*/public function __call($name, $arguments){// Remap $this$self = $this;// Re-base the XML$self = new CFSimpleXML($self->asXML());// Determine XPath query$self->xpath_expression = 'descendant-or-self::' . $name;// Get the results and augment with CFArray$results = $self->xpath($self->xpath_expression);if (!count($results)) return false;$results = new CFArray($results);// If an integer was passed, return only that resultif (isset($arguments[0]) && is_int($arguments[0])){if (isset($results[$arguments[0]])){return $results[$arguments[0]];}return false;}return $results;}/*** Alternate approach to constructing a new instance. Supports chaining.** @param string $data (Required) A well-formed XML string or the path or URL to an XML document if $data_is_url is <code>true</code>.* @param integer $options (Optional) Used to specify additional LibXML parameters. The default value is <code>0</code>.* @param boolean $data_is_url (Optional) Specify a value of <code>true</code> to specify that data is a path or URL to an XML document instead of string data. The default value is <code>false</code>.* @param string $ns (Optional) The XML namespace to return values for.* @param boolean $is_prefix (Optional) (No description provided by PHP.net.)* @return CFSimpleXML Creates a new <CFSimpleXML> element.*/public static function init($data, $options = 0, $data_is_url, $ns, $is_prefix = false){if (version_compare(PHP_VERSION, '5.3.0', '<')){throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');}$self = get_called_class();return new $self($data, $options, $data_is_url, $ns, $is_prefix);}/*%******************************************************************************************%*/// TRAVERSAL/*** Wraps the results of an XPath query in a <CFArray> object.** @param string $expr (Required) The XPath expression to use to query the XML response.* @return CFArray A <CFArray> object containing the results of the XPath query.*/public function query($expr){return new CFArray($this->xpath($expr));}/*** Gets the parent or a preferred ancestor of the current element.** @param string $node (Optional) Name of the ancestor element to match and return.* @return CFSimpleXML A <CFSimpleXML> object containing the requested node.*/public function parent($node = null){if ($node){$parents = $this->xpath('ancestor-or-self::' . $node);}else{$parents = $this->xpath('parent::*');}return $parents[0];}/*%******************************************************************************************%*/// ALTERNATE FORMATS/*** Gets the current XML node as a true string.** @return string The current XML node as a true string.*/public function to_string(){return (string) $this;}/*** Gets the current XML node as <CFArray>, a child class of PHP's <php:ArrayObject> class.** @return CFArray The current XML node as a <CFArray> object.*/public function to_array(){return new CFArray(json_decode(json_encode($this), true));}/*** Gets the current XML node as a stdClass object.** @return array The current XML node as a stdClass object.*/public function to_stdClass(){return json_decode(json_encode($this));}/*** Gets the current XML node as a JSON string.** @return string The current XML node as a JSON string.*/public function to_json(){return json_encode($this);}/*** Gets the current XML node as a YAML string.** @return string The current XML node as a YAML string.*/public function to_yaml(){return sfYaml::dump(json_decode(json_encode($this), true), 5);}/*%******************************************************************************************%*/// COMPARISONS/*** Whether or not the current node exactly matches the compared value.** @param string $value (Required) The value to compare the current node to.* @return boolean Whether or not the current node exactly matches the compared value.*/public function is($value){return ((string) $this === $value);}/*** Whether or not the current node contains the compared value.** @param string $value (Required) The value to use to determine whether it is contained within the node.* @return boolean Whether or not the current node contains the compared value.*/public function contains($value){return (stripos((string) $this, $value) !== false);}}