我创建了一个数组,然后将 0..n 个元素推送到数组中的一个子数组上(最容易理解我在下面的代码中的意思)
当我通过 XML_Serializer 运行数组时,它会在推送的元素周围添加额外的标签
$serializer_options = array(
XML_SERIALIZER_OPTION_INDENT => ' ',
XML_SERIALIZER_OPTION_RETURN_RESULT => TRUE,
rootName => 'JZ_2103'
);
$serializer = &new XML_Serializer($serializer_options);
$otXmlArr = array(
'status' => 'success',
'reason' => 'null',
'payload' => array(
'ContactsResponse' => array()
)
);
foreach ($mydata as $item) {
array_push($otXmlArr['payload']['ContactsResponse'],
array(
'Contact' => array(
'ID' => $item['id'],
'FirstName' => $item['fname']
)
)
);
}
$otXml = $serializer->serialize($otXmlArr);
创建的 xml 有额外的标签<XML_Serializer_Tag>
。如何消除这些标签?
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<XML_Serializer_Tag>
<Contact>
<ID>10</ID>
<FirstName>Roy</FirstName>
</Contact>
</XML_Serializer_Tag>
</ContactsResponse>
</payload>
</JZ_2103>
Abstr 的解决方案几乎可以工作 - 它产生:
从数组的 print_r :
Array
(
[status] => success
[reason] => null
[payload] => Array
(
[ContactsResponse] => Array
(
[0] => Array
(
[Contact] => Array
(
[ID] => 3
[FirstName] => Joe
)
)
[1] => Array
(
[Contact] => Array
(
[ID] => 4
[FirstName] => Fred
)
)
)
)
)
序列化的 XML:
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<Contact>
<ID>3</ID>
<FirstName>Joe</FirstName>
</Contact>
</ContactsResponse>
<ContactsResponse>
<Contact>
<ID>4</ID>
<FirstName>Fred</FirstName>
</Contact>
</ContactsResponse>
</payload>
</JZ_2103>
使用 Daniel 的建议,XML 输出是: Extra level of nesting :-(
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<Contact>
<Contact>
<ID>3</ID>
<FirstName>Joe</FirstName>
</Contact>
</Contact>
<Contact>
<Contact>
<ID>4</ID>
<FirstName>Fred</FirstName>
</Contact>
</Contact>
</ContactsResponse>
</payload>
</JZ_2103>
我将放弃使用序列化程序,只使用我认为的 simpleXml 直接构建 xml。这一切都是为了节省一些时间而开始的,显然,事实并非如此!
感谢 Daniel 和 Abstr 的帮助,即使这并没有让我到达终点线。