如何将XML数据作为关联数组获取,并将属性作为PHP中的键

时间:2013-02-27 11:15:17

标签: php xml

我需要将以下XML转换/解析为关联数组。我尝试使用PHP的simplexml_load_string函数,但它没有将属性检索为关键元素。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<OPS_envelope>
 <header>
  <version>0.9</version>
 </header>
 <body>
  <data_block>
   <dt_assoc>
    <item key="protocol">XCP</item>
    <item key="object">DOMAIN</item>
    <item key="response_text">Command Successful</item>
    <item key="action">REPLY</item>
    <item key="attributes">
     <dt_assoc>
      <item key="price">10.00</item>
     </dt_assoc>
    </item>
    <item key="response_code">200</item>
    <item key="is_success">1</item>
   </dt_assoc>
  </data_block>
 </body>
</OPS_envelope>

我需要像这样的上述XML数据,key =&gt;价值对。

array('protocol' => 'XCP',
    'object' => 'DOMAIN', 
    'response_text' => 'Command Successful',
    'action' => 'REPLY', 
    'attributes' => array(
      'price' => '10.00'
    ),
    'response_code' => '200',
    'is_success' => 1
)

1 个答案:

答案 0 :(得分:1)

您可以使用DOMDocumentXPath来做您想做的事情:

$data = //insert here your xml
$DOMdocument = new DOMDocument();
$DOMdocument->loadXML($data);
$xpath = new DOMXPath($DOMdocument);
$itemElements = $xpath->query('//item'); //obtain all items tag in the DOM
$argsArray = array();
foreach($itemElements as $itemTag)
{
    $key = $itemTag->getAttribute('key'); //obtain the key
    $value = $itemTag->nodeValue; //obtain value
    $argsArray[$key] = $value;
}

您可以点击DOMDocumentXPath

找到更多信息

修改

我看到你有一个有叶子的节点。

<item key="attributes">
    <dt_assoc>
        <item key="price">10.00</item>
    </dt_assoc>
</item>

显然,在这种情况下,你必须再次“导航”这个“子DOM”以获得你正在寻找的东西。

Prasanth答案也不错,但会产生等等作为键,我不知道你是否想要它。