我创建了一个数组,然后将 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 的帮助,即使这并没有让我到达终点线。