function StartElement($parser, $name, $attrs = array())
    {
        //Make the name of the tag lower case
        $name = strtolower($name);
        
        //Check to see if tag is root-level
        if (count($this->stack) == 0) 
        {
            //If so, set the document as the current tag
            $this->document = new MultiotpXMLTag($name, $attrs);

            //And start out the stack with the document tag
            $this->stack = array('document');
        }
        //If it isn't root level, use the stack to find the parent
        else
        {
            //Get the name which points to the current direct parent, relative to $this
            $parent = $this->GetStackLocation();
            
            //Add the child
            eval('$this->'.$parent.'->AddChild($name, $attrs, '.count($this->stack).', $this->cleanTagNames);');
            
            //If the cleanTagName feature is on, replace colons and dashes with underscores
            if($this->cleanTagNames)
                $name = str_replace(array(':', '-'), '_', $name);


            //Update the stack
            eval('$this->stack[] = $name.\'[\'.(count($this->'.$parent.'->'.$name.') - 1).\']\';');
        }
    }
function StartElement($parser, $name, $attrs = array())
    {
        //Make the name of the tag lower case
        $name = strtolower($name);
        
        //Check to see if tag is root-level
        if (count($this->stack) == 0) 
        {
            //If so, set the document as the current tag
            $this->document = new MultiotpXMLTag($name, $attrs);

            //And start out the stack with the document tag
            $this->stack = array('document');
        }
        //If it isn't root level, use the stack to find the parent
        else
        {
            //Get the name which points to the current direct parent, relative to $this
            $parent = $this->GetStackLocation();
            
            //Add the child
            eval('$this->'.$parent.'->AddChild($name, $attrs, '.count($this->stack).', $this->cleanTagNames);');
            
            //If the cleanTagName feature is on, replace colons and dashes with underscores
            if($this->cleanTagNames)
                $name = str_replace(array(':', '-'), '_', $name);


            //Update the stack
            eval('$this->stack[] = $name.\'[\'.(count($this->'.$parent.'->'.$name.') - 1).\']\';');
        }
    }
function StartElement ( $ parser , $ name , $ attrs = array ( ) ) { //Make the name of the tag lower case $ name = strtolower ( $ name ) ; //Check to see if tag is root-level if ( count ( $ this -> stack ) == 0 ) { //If so, set the document as the current tag $ this -> document = new MultiotpXMLTag ( $ name , $ attrs ) ; //And start out the stack with the document tag $ this -> stack = array ( 'document' ) ; } //If it isn't root level, use the stack to find the parent else { //Get the name which points to the current direct parent, relative to $this $ parent = $ this -> GetStackLocation ( ) ; //Add the child eval ( '$this->' . $ parent . '->AddChild($name, $attrs, ' . count ( $ this -> stack ) . ', $this->cleanTagNames);' ) ; //If the cleanTagName feature is on, replace colons and dashes with underscores if ( $ this -> cleanTagNames ) $ name = str_replace ( array ( ':' , '-' ) , '_' , $ name ) ; //Update the stack eval ( '$this->stack[] = $name.\'[\'.(count($this->' . $ parent . '->' . $ name . ') - 1).\']\';' ) ; } }
Handler function for the start of a tag

@param resource $parser
@param string $name
@param array $attrs
Handler function for the start of a tag