我有一个Soap API,可以从PHP代码中调用。我在将其转换为数组时遇到麻烦。我也在Stackoverflow和google上搜索了许多问题,但不够有用。
将以下内容转换为数组时遇到问题。
<objects>
<ABCnxtObj>
xsi:type="api:Lead"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Key>702144</Key>
<Custom>
<BusinessName>9<BusinessName>
</Custom>
</ABCnxtObj>
</objects>
我将其转换为以下数组:
$objects = [
'ABCnxtObj' => [
'Key' => 702144,
'Custom' => [
'BusinessName' => 9
]
]
];
这里的问题是我无法放置xsi:type和xmlns:xsi属性。谁能解释一下如何在数组中传递这些值。
或者还有另一种方法。
谢谢!
答案 0 :(得分:0)
以这个为例:
$data = '<objects>
<ABCnxtObj xsi:type="api:Lead" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Key>702144</Key>
<Custom>
<BusinessName>9</BusinessName>
</Custom>
</ABCnxtObj>
</objects>';
$xml = simplexml_load_string($data);
$namespaces = $xml->getNamespaces(1);
$array = [];
foreach ($xml AS $obj => $val) {
foreach ($namespaces AS $ns => $nsv) {
$array[$obj]['namespaces'][$ns] = $nsv;
foreach ($xml->$obj->attributes($ns, 1) AS $name => $value) {
$array[$obj]['attributes'][$ns.':'.$name] = (string) $value[0];
}
}
$array[$obj]['object'] = $val;
}
var_dump($array);
属性xmlns:xsi
是一个命名空间定义,您可以使用SimpleXMLElement对象的getNamespaces
方法读取它。当您知道什么命名空间可以出现在XML中时,您可以读取所有命名空间下的属性-这是在内部foreach循环中发生的:遍历所有命名空间并读取当前命名空间中的所有属性。