File tree 2 files changed +123
-1
lines changed
2 files changed +123
-1
lines changed Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ echo \darkfriend\helpers\Xml::encode($array);
35
35
#### Result encode
36
36
37
37
``` xml
38
+ <?xml version =" 1.0" encoding =" utf-8" ?>
38
39
<root >
39
40
<bar >value bar</bar >
40
41
<foo >value foo</foo >
90
91
)
91
92
)
92
93
)
94
+ ```
95
+
96
+ ### Custom \< ?xml \? > attributes
97
+
98
+ ``` php
99
+ $array = array(
100
+ 'bar' => 'value bar',
101
+ 'foo' => 'value foo',
102
+ 'der' => array(
103
+ '@cdata' => 'this is long text',
104
+ '@attributes' => array(
105
+ 'at1' => 'at1val',
106
+ 'at2' => 'at2val',
107
+ ),
108
+ ),
109
+ 'qpo' => array(
110
+ 'sub1' => array('sub2'=>'val')
111
+ )
112
+ );
113
+
114
+ echo \darkfriend\helpers\Xml::encode(
115
+ $array,
116
+ [
117
+ 'header' => [
118
+ 'version' => 1.0,
119
+ 'encoding' => 'utf-8',
120
+ ],
121
+ ]
122
+ );
123
+ ```
124
+
125
+ ``` xml
126
+ <?xml version =" 1.0" encoding =" utf-8" ?>
127
+ <root >
128
+ <bar >value bar</bar >
129
+ <foo >value foo</foo >
130
+ <der at1 =" at1val" at2 =" at2val" ><![CDATA[ this is long text]]> </der >
131
+ <qpo >
132
+ <sub1 >
133
+ <sub2 >val</sub2 >
134
+ </sub1 >
135
+ </qpo >
136
+ </root >
137
+ ```
138
+
139
+ ### Custom root element
140
+
141
+ ``` php
142
+ $array = array(
143
+ 'bar' => 'value bar',
144
+ 'foo' => 'value foo',
145
+ 'der' => array(
146
+ '@cdata' => 'this is long text',
147
+ '@attributes' => array(
148
+ 'at1' => 'at1val',
149
+ 'at2' => 'at2val',
150
+ ),
151
+ ),
152
+ 'qpo' => array(
153
+ 'sub1' => array('sub2'=>'val')
154
+ )
155
+ );
156
+
157
+ echo \darkfriend\helpers\Xml::encode(
158
+ $array,
159
+ [
160
+ 'root' => '<response />',
161
+ 'header' => [
162
+ 'version' => 1.0,
163
+ 'encoding' => 'utf-8',
164
+ ],
165
+ ]
166
+ );
167
+ ```
168
+
169
+ ``` xml
170
+ <?xml version =" 1.0" encoding =" utf-8" ?>
171
+ <response >
172
+ <bar >value bar</bar >
173
+ <foo >value foo</foo >
174
+ <der at1 =" at1val" at2 =" at2val" ><![CDATA[ this is long text]]> </der >
175
+ <qpo >
176
+ <sub1 >
177
+ <sub2 >val</sub2 >
178
+ </sub1 >
179
+ </qpo >
180
+ </response >
93
181
```
Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ class Xml
18
18
* @param array $params = [
19
19
* 'root' => '<root/>',
20
20
* 'exception' => false,
21
+ * 'header' => false,
21
22
* ]
22
23
* @return string
23
24
* @throws XmlException
@@ -29,8 +30,13 @@ public static function encode($data, $params = array())
29
30
if (empty ($ params ['root ' ])) {
30
31
$ params ['root ' ] = self ::$ root ;
31
32
}
33
+ if (!isset ($ params ['header ' ])) {
34
+ $ params ['header ' ] = false ;
35
+ }
32
36
33
- $ xml = new SimpleXMLElement ($ params ['root ' ]);
37
+ $ xml = new SimpleXMLElement (
38
+ self ::getHeader ($ params ['header ' ]).$ params ['root ' ]
39
+ );
34
40
$ xml = self ::generateXml ($ xml , $ data );
35
41
36
42
if (!static ::checkException ($ params )) {
@@ -40,6 +46,34 @@ public static function encode($data, $params = array())
40
46
return $ xml ->asXML ();
41
47
}
42
48
49
+ /**
50
+ * @param array $params header attributes
51
+ * @return string
52
+ * @since 1.0.1
53
+ */
54
+ public static function getHeader ($ params = array ())
55
+ {
56
+ if (!$ params ) return '' ;
57
+ if (!is_array ($ params )) {
58
+ $ params = array ();
59
+ }
60
+
61
+ $ params = array_merge (
62
+ array (
63
+ 'version ' => '1.0 ' ,
64
+ 'encoding ' => 'utf-8 ' ,
65
+ ),
66
+ $ params
67
+ );
68
+
69
+ $ attr = array ();
70
+ foreach ($ params as $ attrKey =>$ attrVal ) {
71
+ $ attr [] = "$ attrKey= \"$ attrVal \"" ;
72
+ }
73
+
74
+ return '<?xml ' .implode (' ' , $ attr ).'?> ' ;
75
+ }
76
+
43
77
/**
44
78
* @param SimpleXMLElement $xml
45
79
* @param mixed $data
You can’t perform that action at this time.
0 commit comments