<?php 
     
include ('./classes/table/Tabelle.php'); 
include('./classes/Bundesanzeiger/TableXML.php'); 
 
class XMLProcessor { 
    private static $output_doc; 
        private static $html_result; 
    public static function init() { 
            //AppendFunctionstoTemplate 
             
            XMLTransformer::appendTemplate("A", "XMLProcessor::Absatz"); 
            XMLTransformer::appendTemplate("b", "XMLProcessor::Bold"); 
            XMLTransformer::appendTemplate("i", "XMLProcessor::Kursiv"); 
            XMLTransformer::appendTemplate("BerichtsteilUeberschrift", "XMLProcessor::Berichtsteil"); 
            XMLTransformer::appendTemplate("Zwischentitel", "XMLProcessor::Zwischentitel"); 
            XMLTransformer::appendTemplate("LI", "XMLProcessor::Liste"); 
            XMLTransformer::appendTemplate("L-Titel", "XMLProcessor::LTitel"); 
            XMLTransformer::appendTemplate("Tabelle", "XMLProcessor::initTabelle"); 
             
 
            $dom = new DOMDocument('1.0', 'UTF-8'); 
            $dom->xmlStandalone = false; 
            $dom->load("info.xml"); 
 
            self::$output_doc =$dom; 
    } 
 
    public static function appendHTML($string) { 
        self::$html_result .= $string; 
    } 
    /* 
     *  
     * Ausgabe 
     *  
     */ 
    public static function output() { 
            self::$output_doc->saveXML(); 
            self::$output_doc->preserveWhiteSpace = false; 
            self::$output_doc->formatOutput = true; 
             
 
            self::$output_doc->save("write.xml"); 
             
            return self::$html_result; 
         
    } 
     
    /* 
     *  
     * XML-Templates 
     *  
     */     
    /* 
     * Absatz 
     */ 
    public static function Absatz($node) { 
             
        //Create Element and Append it to output-Dom 
        $absatz = self::$output_doc->createElement( "A" ); 
        self::$output_doc->lastChild->appendChild( $absatz ); 
        //set Text of Node 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( $node->nodeValue ) 
        ); 
        self::$html_result.="<p>".$node."</p>"; 
                 
    } 
    /* 
     * Absatz 
     */ 
    public static function Berichtsteil($node) { 
             
        $absatz = self::$output_doc->createElement( "BerichtsteilUeberschrift" ); 
        self::$output_doc->lastChild->appendChild( $absatz ); 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( $node->nodeValue ) 
        ); 
        self::$html_result.="<h2>".$node."</h2>"; 
    } 
    /* 
     * Zwischentitel 
     */ 
    public static function Zwischentitel($node) { 
             
        $absatz = self::$output_doc->createElement( "Zwischentitel" ); 
        self::$output_doc->lastChild->appendChild( $absatz ); 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( $node->nodeValue ) 
        ); 
        self::$html_result.="<h3>".$node."</h3>"; 
    } 
         
    /* 
     * Liste 
    */  
    public static function Liste($node) { 
             
        $absatz = self::$output_doc->createElement( "A" ); 
        self::$output_doc->lastChild->appendChild( $absatz ); 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( " ? ".$node->nodeValue ) 
        ); 
        self::$html_result.="<p>"." ? ".$node."</p>"; 
                 
    } 
    /* 
     * Kursiv 
     */ 
    public static function Kursiv($node) { 
             
        $absatz = self::$output_doc->createElement( "i" ); 
        self::$output_doc->lastChild->lastChild->appendChild( $absatz ); 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( $node->nodeValue ) 
        ); 
        self::$html_result.="<i>".$node."</i>"; 
                 
    } 
    /* 
     * Bold 
     */ 
    public static function Bold($node) { 
             
        $absatz = self::$output_doc->createElement( "b" ); 
        self::$output_doc->lastChild->lastChild->appendChild( $absatz ); 
        $absatz->appendChild( 
                self::$output_doc->createTextNode( $node->nodeValue ) 
        ); 
        self::$html_result.="<b>".$node."</b>"; 
                 
    } 
 
    /* 
     * LTitel 
     */ 
    public static function LTitel($node) { 
             
        $absatz = self::$output_doc->createElement( "L-Titel" ); 
        self::$output_doc->lastChild->appendChild( $absatz ); 
                 
        $absatz->appendChild(self::$output_doc->createTextNode( $node->nodeValue )); 
                 
    } 
     
    /* 
     * Tabelle 
     */ 
    public static function initTabelle(SimpleXMLElement $node) { 
 
        $attribute = $node->attributes("aid",true); 
        $max_x = intval($attribute["tcols"]); 
        $max_y = intval($attribute["trows"]); 
            $table = new Tabelle($max_x, $max_y); 
 
            //for looping with iterator - $x and $y 
            $cells = $node; 
                 
            foreach($cells as $cell) { 
 
                $cell_o = self::Zelle($cell); 
                $anz_headerzeilen =0; 
                $str_format = "TBODY"; 
                $zeilentyp = "TBODY"; 
                list($x, $y) = $table->addCell($cell_o); 
 
                if($cell->children()!=NULL) { 
                        $contentnodes = $cell->children(); 
                        foreach($contentnodes as $contentnode) { 
                                $str_format = $contentnode->getName(); 
                                $zeilentyp = self::getZeilentyp($str_format); 
                                if($zeilentyp=="THEAD") { 
                                    $anz_headerzeilen = $y+1; 
                                } 
                                break; 
                        } 
                        $table->setAnzHeader($anz_headerzeilen); 
                } 
 
            } 
         
         
         
            /* 
             * Output 
             */ 
            self::$html_result.= $table->toHTML();     
            $eBanXML = new TableXML(); 
            $doc = & self::$output_doc; 
            $tablenodes = $eBanXML->createTableNode($table, $doc); 
 
            foreach($tablenodes as $tablenode) { 
                self::$output_doc->lastChild->appendChild($tablenode); 
            } 
             
    } 
     
    public static function Zelle(SimpleXMLElement $cell) { 
         
        $attributes = $cell->attributes("aid", true); 
        $cols = intval($attributes["ccols"]); 
        $rows = intval($attributes["crows"]); 
        //Default values 
        $align="left"; 
        $format=""; 
        $value=""; 
        $contentnodes = $cell->children(); 
        $i=0; 
        foreach($contentnodes as $contentnode) { 
            if($i>0) { 
                $value.="<br />"; 
            } 
         
            $str_formatnode = $contentnode->getName(); 
            $align = self::getAlignment($str_formatnode); 
            $format = self::getFormat($str_formatnode); 
            $value.=$contentnode;         
            $i++; 
        } 
 
        $cell_o = new Zelle(); 
        $cell_o->setFormat($format); 
        $cell_o->setAlign($align); 
        $cell_o->setColspan($cols); 
        $cell_o->setRowspan($rows); 
        $cell_o->setValue($value); 
         
         
        return $cell_o; 
    } 
     
    public static function getAlignment($str_format) { 
             
        if (strpos($str_format,'left') !== false) { 
            return 'left'; 
        } 
        else if (strpos($str_format,'right') !== false) { 
            return 'right'; 
        } 
        else if (strpos($str_format,'center') !== false) { 
            return 'center'; 
        } 
        else { 
            return 'left'; 
        } 
                 
    } 
    public static function getFormat($str_format) { 
             
        if (strpos($str_format, 'bold')) { 
            return 'bold'; 
        } else if(strpos($str_format, 'italic')) { 
            return 'italic'; 
        } else { 
            return ''; 
        } 
                 
    } 
     
    public static function getZeilentyp($str_format) { 
             
        if(strpos($str_format, 'THEAD')) { 
            return 'THEAD'; 
        } else if(strpos($str_format, 'TBODY')) { 
            return 'TBODY'; 
        } else { 
            return 'TBODY'; 
        } 
                 
    } 
         
        /** 
        * function xml2array 
        * 
        * This function is part of the PHP manual. 
        * 
        * The PHP manual text and comments are covered by the Creative Commons  
        * Attribution 3.0 License, copyright (c) the PHP Documentation Group 
        * 
        * @author  k dot antczak at livedata dot pl 
        * @date    2011-04-22 06:08 UTC 
        * @link    http://www.php.net/manual/en/ref.simplexml.php#103617 
        * @license http://www.php.net/license/index.php#doc-lic 
        * @license http://creativecommons.org/licenses/by/3.0/ 
        * @license CC-BY-3.0 <http://spdx.org/licenses/CC-BY-3.0> 
        */ 
    private static function node2array($xmlnode, $recursion = null) { 
         
        $xmlarray = array(); 
        foreach ($xmlnode as $xmlobject) { 
            $tagname = $xmlobject->getName(); 
            $xmlarray["tagname"] = $tagname;  
                 
                 
            /* 
            * Attributes 
            */ 
            if($xmlobject->attributes()) { 
                $xmlarray["attributes"] = array(); 
                foreach($xmlobject->attributes() as $attribute_name=>$attribute_value) { 
                    $xmlarray["attributes"][$attribute_name] = $attribute_value; 
                } 
            } 
                 
            if(($xmlobject->children()!=NULL) 
                && (($recursion > 0) || ($recursion == NULL))) { 
                     
                $childarray = self::node2array( 
                $xmlobject->children(), 
                    $recursion-1 
                ); 
                $xmlarray["children"] = $childarray; 
                //Debughelper::myprint_r($xmlarray["children"]); 
                     
            } 
        } 
        return $xmlarray; 
         
    } 
     
    private static function xml2array ( $xmlObject, $out = array () ) { 
         
        foreach ( (array) $xmlObject as $index => $node ) { 
            $out[$index] = ( is_object ( $node ) ) ? self::xml2array ( $node ) : $node; 
        } 
        return $out; 
 
    }   
} 
 
?> 
 
 |