1

我需要将以下 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 数据,键 => 值对。

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

1 回答 1

2

你可以使用DOMDocumentandXPath做你想做的事:

$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的回答也不错,但是会产生等作为key,不知道是不是你想要的。

于 2013-02-27T11:23:33.413 回答