102 public static function recXmlPrint( $name, $value, $indent, $attributes = [] ) {
104 if ( $indent !==
null ) {
105 if ( $name !==
null ) {
108 $indstr =
"\n" . str_repeat(
' ', $indent );
113 if ( is_object( $value ) ) {
114 $value = (array)$value;
116 if ( is_array( $value ) ) {
120 $subelementKeys = array_merge(
134 $indexedSubelements = [];
135 foreach ( $value as $k => $v ) {
141 if ( is_bool( $v ) && !in_array( $k, $bcBools,
true ) ) {
142 $v = $v ?
'true' :
'false';
145 if ( $name !==
null && $k === $contentKey ) {
147 } elseif ( is_int( $k ) ) {
148 $indexedSubelements[$k] = $v;
149 } elseif ( is_array( $v ) || is_object( $v ) ) {
150 $subelements[self::mangleName( $k, $preserveKeys )] = $v;
151 } elseif ( in_array( $k, $subelementKeys,
true ) || $name ===
null ) {
152 $subelements[self::mangleName( $k, $preserveKeys )] = [
157 } elseif ( is_bool( $oldv ) ) {
159 $attributes[self::mangleName( $k, $preserveKeys )] =
'';
161 } elseif ( $v !==
null ) {
162 $attributes[self::mangleName( $k, $preserveKeys )] = $v;
166 if ( $content !==
null ) {
167 if ( $subelements || $indexedSubelements ) {
168 $subelements[self::mangleName( $contentKey, $preserveKeys )] = [
169 'content' => $content,
174 } elseif ( is_scalar( $content ) ) {
177 $attributes += [
'xml:space' =>
'preserve' ];
181 if ( $content !==
null ) {
182 if ( is_scalar( $content ) ) {
184 $retval .= $indstr .
Xml::element( $name, $attributes, $content );
186 if ( $name !==
null ) {
187 $retval .= $indstr .
Xml::element( $name, $attributes,
null );
189 $retval .= static::recXmlPrint(
null, $content, $indent );
190 if ( $name !==
null ) {
194 } elseif ( !$indexedSubelements && !$subelements ) {
195 if ( $name !==
null ) {
196 $retval .= $indstr .
Xml::element( $name, $attributes );
199 if ( $name !==
null ) {
200 $retval .= $indstr .
Xml::element( $name, $attributes,
null );
202 foreach ( $subelements as $k => $v ) {
203 $retval .= static::recXmlPrint( $k, $v, $indent );
205 foreach ( $indexedSubelements as $k => $v ) {
206 $retval .= static::recXmlPrint( $indexedTagName, $v, $indent,
207 $indexSubelements ? [
'_idx' => $k ] : []
210 if ( $name !==
null ) {
217 if ( $value ===
null ) {
219 $retval .= $indstr .
Xml::element( $name, $attributes );
222 $retval .= $indstr .
Xml::element( $name, $attributes, $value );