]> git.mxchange.org Git - friendica.git/blob - include/xml.php
Retraction and reshares work
[friendica.git] / include / xml.php
1 <?php
2 /**
3  * @brief This class contain functions to work with XML data
4  *
5  */
6 class xml {
7         function from_array($array, &$xml, $remove_header = false, $namespaces = array(), $root = true) {
8
9                 if ($root) {
10                         foreach($array as $key => $value) {
11                                 foreach ($namespaces AS $nskey => $nsvalue)
12                                         $key .= " xmlns".($nskey == "" ? "":":").$nskey.'="'.$nsvalue.'"';
13
14                                 $root = new SimpleXMLElement("<".$key."/>");
15                                 self::from_array($value, $root, $remove_header, $namespaces, false);
16
17                                 $dom = dom_import_simplexml($root)->ownerDocument;
18                                 $dom->formatOutput = true;
19                                 $xml = $dom;
20
21                                 $xml_text = $dom->saveXML();
22
23                                 if ($remove_header)
24                                         $xml_text = trim(substr($xml_text, 21));
25
26                                 return $xml_text;
27                         }
28                 }
29
30                 foreach($array as $key => $value) {
31                         if ($key == "@attributes") {
32                                 if (!isset($element) OR !is_array($value))
33                                         continue;
34
35                                 foreach ($value as $attr_key => $attr_value) {
36                                         $element_parts = explode(":", $attr_key);
37                                         if ((count($element_parts) > 1) AND isset($namespaces[$element_parts[0]]))
38                                                 $namespace = $namespaces[$element_parts[0]];
39                                         else
40                                                 $namespace = NULL;
41
42                                         $element->addAttribute ($attr_key, $attr_value, $namespace);
43                                 }
44
45                                 continue;
46                         }
47
48                         $element_parts = explode(":", $key);
49                         if ((count($element_parts) > 1) AND isset($namespaces[$element_parts[0]]))
50                                 $namespace = $namespaces[$element_parts[0]];
51                         else
52                                 $namespace = NULL;
53
54                         if (!is_array($value))
55                                 $element = $xml->addChild($key, xmlify($value), $namespace);
56                         elseif (is_array($value)) {
57                                 $element = $xml->addChild($key, NULL, $namespace);
58                                 self::from_array($value, $element, $remove_header, $namespaces, false);
59                         }
60                 }
61         }
62
63         function copy(&$source, &$target, $elementname) {
64                 if (count($source->children()) == 0)
65                         $target->addChild($elementname, $source);
66                 else {
67                         $child = $target->addChild($elementname);
68                         foreach ($source->children() AS $childfield => $childentry)
69                                 self::copy($childentry, $child, $childfield);
70                 }
71         }
72 }
73 ?>