82 public static function recXmlPrint( $name, $value, $indent, $attributes = [] ) {
84 if ( $indent !==
null ) {
85 if ( $name !==
null ) {
88 $indstr =
"\n" . str_repeat(
' ', $indent );
93 if ( is_object( $value ) ) {
94 $value = (array)$value;
96 if ( is_array( $value ) ) {
100 $subelementKeys = array_merge(
114 $indexedSubelements = [];
115 foreach ( $value as $k => $v ) {
121 if ( is_bool( $v ) && !in_array( $k, $bcBools,
true ) ) {
122 $v = $v ?
'true' :
'false';
125 if ( $name !==
null && $k === $contentKey ) {
127 } elseif ( is_int( $k ) ) {
128 $indexedSubelements[$k] = $v;
129 } elseif ( is_array( $v ) || is_object( $v ) ) {
130 $subelements[self::mangleName( $k, $preserveKeys )] = $v;
131 } elseif ( in_array( $k, $subelementKeys,
true ) || $name ===
null ) {
132 $subelements[self::mangleName( $k, $preserveKeys )] = [
137 } elseif ( is_bool( $oldv ) ) {
139 $attributes[self::mangleName( $k, $preserveKeys )] =
'';
141 } elseif ( $v !==
null ) {
142 $attributes[self::mangleName( $k, $preserveKeys )] = $v;
146 if ( $content !==
null ) {
147 if ( $subelements || $indexedSubelements ) {
148 $subelements[self::mangleName( $contentKey, $preserveKeys )] = [
149 'content' => $content,
154 } elseif ( is_scalar( $content ) ) {
157 $attributes += [
'xml:space' =>
'preserve' ];
161 if ( $content !==
null ) {
162 if ( is_scalar( $content ) ) {
164 $retval .= $indstr .
Xml::element( $name, $attributes, $content );
166 if ( $name !==
null ) {
167 $retval .= $indstr .
Xml::element( $name, $attributes,
null );
169 $retval .= static::recXmlPrint(
null, $content, $indent );
170 if ( $name !==
null ) {
174 } elseif ( !$indexedSubelements && !$subelements ) {
175 if ( $name !==
null ) {
176 $retval .= $indstr .
Xml::element( $name, $attributes );
179 if ( $name !==
null ) {
180 $retval .= $indstr .
Xml::element( $name, $attributes,
null );
182 foreach ( $subelements as $k => $v ) {
183 $retval .= static::recXmlPrint( $k, $v, $indent );
185 foreach ( $indexedSubelements as $k => $v ) {
186 $retval .= static::recXmlPrint( $indexedTagName, $v, $indent,
187 $indexSubelements ? [
'_idx' => $k ] : []
190 if ( $name !==
null ) {
197 if ( $value ===
null ) {
199 $retval .= $indstr .
Xml::element( $name, $attributes );
202 $retval .= $indstr .
Xml::element( $name, $attributes, $value );