我只是想弄清楚如何干净利落地将XML集合转换为适当的对象。看,我有这个非常简单的XML字符串:
$x = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<apiKeys>
<apiKey application="app1">HfxaoMBJJ9pLe</apiKey>
<apiKey application="app2">HfxaoMBJJ9pLeClsSHsh</apiKey>
<apiKey application="app3">HfxaoMBJJ9pLeClsSHshTI9qX</apiKey>
</apiKeys>';
我使用以下方法进行转换:
$O_xmlElement = simplexml_load_string ($x);
这就是我得到的:
SimpleXMLElement Object
(
[apiKey] => Array
(
[0] => HfxaoMBJJ9pLe
[1] => HfxaoMBJJ9pLeClsSHsh
[2] => HfxaoMBJJ9pLeClsSHshTI9qX
)
)
我宁愿(我期待!)之类的东西:
SimpleXMLElement Object
(
[apiKey] => Array
(
['app1'] => HfxaoMBJJ9pLe
['app2'] => HfxaoMBJJ9pLeClsSHsh
['app3'] => HfxaoMBJJ9pLeClsSHshTI9qX
)
)
非常感谢您的帮助
答案 0 :(得分:1)
SimpleXML不会自动执行您想要的操作。你必须自己构建对象:
$O_xmlElement = simplexml_load_string($x);
$myObject = new stdClass();
foreach ($O_xmlElement->apiKey as $apiKey) {
$key = (string) $apiKey['application'];
$myObject->${key} = (string) $apiKey;
}
有关处理子元素和属性的好例子,请参阅PHP手册中的basic usage example。
从SimpleXMLElement获取属性时,请记住每个属性都是SimpleXMLElement而不是字符串。在将每个属性用作数组键或对象属性名称之前,您需要将每个属性显式地转换为字符串。
答案 1 :(得分:0)
不确定你能否完全按照自己的意愿去做,但你可以在这里查看php.net的文档: http://www.php.net/manual/en/simplexmlelement.attributes.php
基本上,属性可以在附加到每个apiKey对象的对象中找到。
答案 2 :(得分:0)
您可以使用以下代码:
$xml = simplexml_load_string($x);
$newArray = array();
$count=0;
foreach($xml as $value){
$key= (string)($xml->apiKey[$count++]->attributes()->application);
$newArray[$key] = $value[0];
}
$newArray = array_map("trim", $newArray);
print_r($newArray);
这将生成以下输出:
Array
(
[app1] => HfxaoMBJJ9pLe
[app2] => HfxaoMBJJ9pLeClsSHsh
[app3] => HfxaoMBJJ9pLeClsSHshTI9qX
)