PHP XML 到具有属性和值的数组/对象

Posted

技术标签:

【中文标题】PHP XML 到具有属性和值的数组/对象【英文标题】:PHP XML to Array/Object with Attributes and Values 【发布时间】:2014-10-20 17:40:48 【问题描述】:

AI 有一个 XML,其中包含属性和值。我想将它与属性和值一起转换为数组或数组对象。

XML

<?xml version="1.0" encoding="UTF-8"?>
<itemBody>
<div label="options">
  <optionchoices optionIdentifier="RESPONSE" shuffle="false" maxOptions="1">
    <choice identifier="A1"><![CDATA[aaaa]]></choice>
    <choice identifier="A2"><![CDATA[bbbb]]></choice>
    <choice identifier="A3"><![CDATA[cccc]]></choice>
  </optionchoices>
</div>
</itemBody>

我尝试了两组代码,但结果并不如预期。

代码 1

<?php
$xml = simplexml_load_file('test.xml', 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";print_r($xml);echo "</pre>"; exit;
?>

输出

SimpleXMLElement Object
(
    [div] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [label] => options
                )

            [optionchoices] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [optionIdentifier] => RESPONSE
                            [shuffle] => false
                            [maxOptions] => 1
                        )

                    [choice] => Array
                        (
                            [0] => aaaa
                            [1] => bbbb
                            [2] => cccc
                        )

                )

        )

)

在上面的输出中,如果我们检查然后在选择节点中,我们会得到 values only 而不是属性

代码 2

<?php
$xml = simplexml_load_file('test.xml');
echo "<pre>";print_r($xml);echo "</pre>"; exit;
?>

输出

SimpleXMLElement Object
(
    [div] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [label] => options
                )

            [optionchoices] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [optionIdentifier] => RESPONSE
                            [shuffle] => false
                            [maxOptions] => 1
                        )

                    [choice] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [identifier] => A1
                                        )

                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [identifier] => A2
                                        )

                                )

                            [2] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [identifier] => A3
                                        )

                                )

                        )

                )

        )

)

在这个输出中,我们只得到 XML 的属性。

现在我想要的是获取 XML 的属性和值。

请帮忙。

提前致谢。

【问题讨论】:

使用循环。第一个循环第一个 xml 数组以选择 id 作为索引和名称的数组将是第二个索引,然后在相应的索引中循环第二个输出添加属性.. $xml-&gt;div-&gt;attributes() 第一个?根据需要使用循环。 这里有几种用于XML序列化的JSON格式,JsonML,BadgerFish,Rayfish,……你想创建什么样的目标格式? @Abhishek 你有解决办法吗? 【参考方案1】:

这就是我得到的。这就是我所期望的解决方案。

http://outlandish.com/blog/xml-to-json/

【讨论】:

以上是关于PHP XML 到具有属性和值的数组/对象的主要内容,如果未能解决你的问题,请参考以下文章

jQuery创建具有选定属性和值的对象

将对象数组转换为包含键和值的对象作为对象数组

使用 databricks 在 Spark(scala) 中生成具有属性和值的 XML

使用 Lodash 按属性合并对象数组

未选中时,具有对象作为绑定到数组属性的值的 VueJS 复选框不会脱离数组

合并具有相同属性值的json对象c#