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

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Fixing bugs and missing functions of PHP SimpleXMLElement in PHP < 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. /**
  12.  * Class to fix the bugs and shortcuts of PHP SimpleXMLElement
  13.  *
  14.  * @author Beat
  15.  * @copyright Beat 2007
  16.  * @licence allowed for free use within CB and for CB plugins
  17.  */
  18. class FixedSimpleXML extends SimpleXMLElement  {
  19. /**
  20.  * Get the name of the element.
  21.  * Warning: don't use getName() as it's broken up to php 5.2.3 included.
  22.  *
  23.  * @return string
  24.  */
  25. function name( ) {
  26. if ( version_compare( phpversion(), '5.2.3', '>' ) ) {
  27. return $this->getName();
  28. } else {
  29. return $this->aaa->getName(); // workaround php bug number 41867, fixed in 5.2.4
  30. }
  31. }
  32. /**
  33.  * Get the an attribute or all attributes of the element
  34.  *
  35.  * @param  string  $attribute  The name of the attribute if only one attribute is fetched
  36.  * @return mixed   string      If an attribute is given will return the attribute if it exist.
  37.  *                 boolean     Null if attribute is given but doesn't exist
  38.  *     array       If no attribute is given will return the complete attributes array
  39.  */
  40. function attributes( $attribute = null )
  41. {
  42. if( isset( $attribute ) ) {
  43. return ( isset( $this[$attribute]) ? (string) $this[$attribute] : null );
  44. }
  45. $array = array();
  46. foreach ( parent::attributes() as $k => $v ) {
  47. $array[$k] = (string) $v;
  48. }
  49. return $array;
  50. }
  51. /**
  52.  * Get the data of the element
  53.  *
  54.  * @access public
  55.  * @return string
  56.  */
  57. function data( ) {
  58. return (string) $this;
  59. }
  60. /**
  61.  * Adds an attribute to the element, override if it already exists
  62.  *
  63.  * @param string $name
  64.  * @param array  $attrs
  65.  */
  66. function addAttribute( $name, $value ) {
  67. $this[$name] = $value; // it seems that php 5.1.6 requires htmlspecialchars() here to be happy, but stores the htmlspecialchars ! didn't find php changelog/bug report for that.
  68. }
  69. /**
  70.  * Get an element in the document by / separated path
  71.  * or FALSE
  72.  *
  73.  * @param string $path The / separated path to the element
  74.  * @return CBSimpleXMLElement or FALSE
  75.  */
  76. function & getElementByPath( $path ) {
  77. $false = false;
  78. $parts = explode( '/', trim($path, '/') );
  79. $tmp = $this;
  80. foreach ( $parts as $node ) {
  81. $found = false;
  82. foreach ( $tmp->children() as $child ) {
  83. if ( $child->name() == $node ) {
  84. $tmp = $child;
  85. $found = true;
  86. break;
  87. }
  88. }
  89. if ( ! $found ) {
  90. break;
  91. }
  92. }
  93. if ( $found ) {
  94. return $tmp;
  95. } else {
  96. return $false;
  97. }
  98. }
  99. /**
  100.  * Adds a direct child to the element
  101.  *
  102.  * @param string $name
  103.  * @param string $value
  104.  * @param string $nameSpace
  105.  * @param array  $attrs
  106.  * @param int   $level
  107.  * @return FixedSimpleXML the child //BB added !
  108.  */
  109. function & addChildWithAttr( $name, $value, $nameSpace = null, $attrs = array(), $level = null ) {
  110. $child =& parent::addChild( $name, htmlspecialchars( $value ), $nameSpace );
  111. foreach ( $attrs as $k => $v ) {
  112. $child->addAttribute( $k, $v );
  113. }
  114. return $child;
  115. }
  116. /**
  117.  * Removes a child
  118.  *
  119.  * @param FixedSimpleXML $child
  120.  */
  121. function removeChild( &$child ) {
  122. foreach ( $this->children() as $eachChild ) {
  123. if ( $eachChild == $child ) {
  124. unset( $eachChild );
  125. }
  126. }
  127. unset( $child );
  128. }
  129. }
  130. ?>