AlkantarClanX12
Current Path : /home/thanudqk/www/wp-content/plugins/w3-total-cache/lib/SNS/utilities/ |
Current File : /home/thanudqk/www/wp-content/plugins/w3-total-cache/lib/SNS/utilities/simplexml.class.php |
<?php /* * Copyright 2010-2011 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 2011.04.25 * @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 result if (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>. (6/12/2023 Made not required to prevent PHP error/warning for required following optional) * @param string $ns (Optional) The XML namespace to return values for. (6/12/2023 Made not required to prevent PHP error/warning for required following optional) * @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=false, $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); } }