1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?php
/**
* Elgg XML library.
* Contains functions for generating and parsing XML.
*
* @package Elgg.Core
* @subpackage XML
*/
/**
* This function serialises an object recursively into an XML representation.
*
* The function attempts to call $data->export() which expects a stdClass in return,
* otherwise it will attempt to get the object variables using get_object_vars (which
* will only return public variables!)
*
* @param mixed $data The object to serialise.
* @param string $name The name?
* @param int $n Level, only used for recursion.
*
* @return string The serialised XML output.
*/
function serialise_object_to_xml($data, $name = "", $n = 0) {
$classname = ($name == "" ? get_class($data) : $name);
$vars = method_exists($data, "export") ? get_object_vars($data->export()) : get_object_vars($data);
$output = "";
if (($n == 0) || ( is_object($data) && !($data instanceof stdClass))) {
$output = "<$classname>";
}
foreach ($vars as $key => $value) {
$output .= "<$key type=\"" . gettype($value) . "\">";
if (is_object($value)) {
$output .= serialise_object_to_xml($value, $key, $n + 1);
} else if (is_array($value)) {
$output .= serialise_array_to_xml($value, $n + 1);
} else if (gettype($value) == "boolean") {
$output .= $value ? "true" : "false";
} else {
$output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8');
}
$output .= "</$key>\n";
}
if (($n == 0) || (is_object($data) && !($data instanceof stdClass))) {
$output .= "</$classname>\n";
}
return $output;
}
/**
* Serialise an array.
*
* @param array $data The data to serialize
* @param int $n Used for recursion
*
* @return string
*/
function serialise_array_to_xml(array $data, $n = 0) {
$output = "";
if ($n == 0) {
$output = "<array>\n";
}
foreach ($data as $key => $value) {
$item = "array_item";
if (is_numeric($key)) {
$output .= "<$item name=\"$key\" type=\"" . gettype($value) . "\">";
} else {
$item = $key;
$output .= "<$item type=\"" . gettype($value) . "\">";
}
if (is_object($value)) {
$output .= serialise_object_to_xml($value, "", $n + 1);
} else if (is_array($value)) {
$output .= serialise_array_to_xml($value, $n + 1);
} else if (gettype($value) == "boolean") {
$output .= $value ? "true" : "false";
} else {
$output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8');
}
$output .= "</$item>\n";
}
if ($n == 0) {
$output .= "</array>\n";
}
return $output;
}
/**
* Parse an XML file into an object.
*
* @param string $xml The XML
*
* @return object
*/
function xml_to_object($xml) {
return new ElggXMLElement($xml);
}
|