cb.xml.simplexml.php
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:4k
源码类别:

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Abstraction class for PHP SimpleXMLElement for PHP 4 and 5, including < 5.1.3
  4. * @version $Id:$
  5. * @author Beat
  6. * @copyright (C) 2007 Beat and Lightning MultiCom SA, 1009 Pully, Switzerland
  7. * @license Lightning Proprietary. See licence. Allowed for free use within CB and for CB plugins.
  8. */
  9. // Check to ensure this file is within the rest of the framework
  10. if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
  11. //define('CBXML_TEST_CBXML','');
  12. //define('JXML_TEST_DOMIT', '');
  13. define('CB_PHP_XML', class_exists( 'SimpleXMLElement' ) && ( version_compare( phpversion(), '5.1.3', '>=' ) ) && ( ! @ini_get( 'zend.ze1_compatibility_mode' ) ) && ! defined('CBXML_TEST_CBXML') );
  14. if ( CB_PHP_XML ) {
  15. cbimport( 'cb.xml.xml' );
  16. } else {
  17. cbimport( 'cb.xml.domit' );
  18. }
  19. /**
  20.  * SimpleXML Element extended for CB.
  21.  *
  22.  */
  23. class CBSimpleXMLElement extends FixedSimpleXML {
  24. /**
  25.  * Get the first child element in matching all the attiributes $attributes
  26.  *
  27.  * @param   string $name         The name tag of the element searched
  28.  * @param   array   $attributes   array of attribute => value which must match also
  29.  * @return  CBSimpleXMLElement  or false if no child matches
  30.  */
  31. function &getChildByNameAttributes( $name, $attributes = array() ) {
  32. foreach ( $this->children() as $child ) {
  33. if ( $child->name() == $name ) {
  34. $found = true;
  35. foreach ( $attributes as $atr => $val ) {
  36. if ( $child->attributes( $atr ) != $val ) {
  37. $found = false;
  38. break;
  39. }
  40. }
  41. if ( $found ) {
  42. return $child;
  43. }
  44. }
  45. }
  46. $false = false;
  47. return $false;
  48. }
  49. /**
  50.  * Get the first child element in matching the attiribute
  51.  *
  52.  * @param   string $name         The name tag of the element searched
  53.  * @param   string  $attribute    Attribute name to check
  54.  * @param   string  $value        Attribute value which must also match
  55.  * @return CBSimpleXMLElement  or false if no child matches
  56.  */
  57. function &getChildByNameAttr( $name, $attribute, $value = null ) {
  58. foreach ( $this->children() as $child ) {
  59. if ( $child->name() == $name ) {
  60. if ( $child->attributes( $attribute ) == $value ) {
  61. return $child;
  62. }
  63. }
  64. }
  65. $false = false;
  66. return $false;
  67. }
  68. /**
  69.  * Get the first child or childs' child (recursing) element in matching the attiribute
  70.  *
  71.  * @param   string $name         The name tag of the element searched
  72.  * @param   string  $attribute    Attribute name to check
  73.  * @param   string  $value        Attribute value which must also match
  74.  * @return CBSimpleXMLElement  or false if no child matches
  75.  */
  76. function &getAnyChildByNameAttr( $name, $attribute, $value = null ) {
  77. $children = $this->children(); // this is needed due to a bug in PHP 4.4.2 where you can have only 1 iterator per array reference, so doing second iteration on same array within first iteration kills this.
  78. foreach ( $children as $child ) {
  79. if ( $child->name() == $name ) {
  80. if ( $child->attributes( $attribute ) == $value ) {
  81. return $child;
  82. }
  83. }
  84. if ( count( $child->children() ) > 0 ) {
  85. $grandchild = $child->getAnyChildByNameAttr( $name, $attribute, $value ); // recurse
  86. if ( $grandchild ) {
  87. return $grandchild;
  88. }
  89. }
  90. }
  91. $false = false;
  92. return $false;
  93. }
  94. /* THIS MOVED ONE LEVEL DOWN TO PHP-specific implementations !!!
  95.  *
  96.  * Get an element in the document by / separated path
  97.  * or FALSE
  98.  *
  99.  * @param string $path The / separated path to the element
  100.  * @return CBSimpleXMLElement or FALSE
  101.  */
  102. // function & getElementByPath( $path ) {
  103. }
  104. ?>