Einzelnen Beitrag anzeigen
  #2  
Alt 20.07.2006, 16:05:11
Partheeus Partheeus ist offline
Anfänger
 
Registriert seit: Nov 2003
Beiträge: 17
AW: stdClass to XML

So, Tobias hats geschafft. :-)

xml:
Code:
"$xml<?xml version='1.0' standalone='yes'?>" .
"<movies>" .
	"<movie eur=\"10.00\">" .
		"<title>PHP: Behind the Parser</title>" .
		"<characters>" .
			"<character>" .
				"<name>Ms. Coder</name>" .
				"<actor>Onlivia Actora</actor>" .
			"</character>" .
			"<character>" .
				"<name>Mr. Coder</name>" .
				"<actor>El ActÓr</actor>" .
			"</character>" .
		"</characters>" .
		"<plot>" .
			"Text bla bla." .
		"</plot>" .
		"<rating ulf=\"integer\">7</rating>" .
		"<rating type=\"stars\">5</rating>" .
	"</movie>" .
"</movies>";
stdObject:
Code:
stdClass Object
(
    [movie] => stdClass Object
        (
            [title] => PHP: Behind the Parser
            [characters] => stdClass Object
                (
                    [character] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [name] => Ms. Coder
                                    [actor] => Onlivia Actora
                                )

                            [1] => stdClass Object
                                (
                                    [name] => Mr. Coder
                                    [actor] => El ActÓr
                                )

                        )

                )

            [plot] => Text bla bla.
            [rating] => Array
                (
                    [0] => stdClass Object
                        (
                            [_] => 7
                            [ulf] => integer
                        )

                    [1] => stdClass Object
                        (
                            [_] => 5
                            [type] => stars
                        )

                )

            [eur] => 10
        )

)
Aufruf:
PHP-Code:
$s htmlentities(asXML($r,"movies",array(
    
"movies/movie" => "eur",
    
"movies/movie/rating" => "ulf type"
))); 
Funktion:
PHP-Code:
function asXML($obj$name$attrNames=NULL, &$xml=""$path=""$depth=0) {
    if (
is_array($obj)) {
        foreach (
$obj as $v)
            
asXML($v,$name,$attrNames,$xml,$path,$depth);
    } else {
        if (
$path$xml .= "\n";
        
$path $path "$path/$name" $name;
        
$indent str_repeat(" ",$depth*4);
        
$xml .= "$indent<$name";
        
$attr $attrNames[$path];
        if (
$attr) {
            if (!
is_object($obj))
                throw new 
Exception("asXML(): ".
                        
"$path is no object, so it cannot hold attributes");
            
$attr explode(" ",$attr);
            foreach (
$attr as $key)
                if (
$obj->$key$xml .= " $key=\"{$obj->$key}\"";
        } 
        
$xml .= ">";
        if (
is_object($obj)) { 
            
$xml .= $obj->_;
            
$len strlen($xml);
            foreach (
get_object_vars($obj) as $key => $value)
                if (
$key!="_" && (!is_array($attr) || !in_array($key,$attr))) 
                    
asXML($value,$key,$attrNames,$xml,$path,$depth+1);
            if (
$len!=strlen($xml)) $xml .= "\n$indent";
        } else {
            
$xml .= $obj;
        }
        
$xml .= "</$name>";
    }
    return 
$xml;

__________________
Du gleichst dem Geist den Du begreifst, nicht mir!
Mit Zitat antworten