如何在PHP数组中分离HTML/XML标记?

如何在PHP数组中分离HTML/XML标记?,php,arrays,Php,Arrays,我有一个数组,需要拆分参数。到目前为止,我已经尝试: $test = array ( 'username' => 'vale', 'apiaccesskey' => 'myapi', 'action' => 'placeimeiorder', 'requestformat' => 'JSON', 'parameters' => '<PARAMETERS><CUSTOMFIELD>bnVsbA==<

我有一个数组,需要拆分参数。到目前为止,我已经尝试:

$test = array
(
    'username' => 'vale',
    'apiaccesskey' => 'myapi',
    'action' => 'placeimeiorder',
    'requestformat' => 'JSON',
    'parameters' => '<PARAMETERS><CUSTOMFIELD>bnVsbA==</CUSTOMFIELD><ID>221</ID><IMEI>354443063506889</IMEI><MODELID></MODELID><PROVIDERID></PROVIDERID><NETWORK></NETWORK><PIN></PIN><KBH></KBH><MEP></MEP><PRD></PRD><TYPE></TYPE><LOCKS></LOCKS><REFERENCE></REFERENCE><SN></SN><SECRO></SECRO></PARAMETERS>',

    'version' => '2.3.1'
);



$html = $test['parameters'];
$doc = new DOMDocument();
$doc->loadHTML($html);     
$tags = $doc->getElementsByTagName('PARAMETERS');    
echo 'ID '.$tags->item(0)->getAttribute('ID').'" IMEI="'.$tags->item(0)->getAttribute('IMEI').'"/>';

我希望阵列中的输出:

'CUSTOMFIELD' = 'bnVsbA==',
'ID' = '221',
'IMEI' = '354443063506889',
'MODELID' = '',
'PROVIDERID' = '',
'NETWORK' = '',
..so on..
所以我可以使用
echo$test['IMEI']并将输出:354443063506889

如何解决此错误并在
$test['parameters']
中分离所有标记

谢谢你的帮助

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML('...');
libxml_clear_errors();

要忽略警告,请将use
libxml\u use\u internal\u errors(true)
;在
loadHTML()
函数之前。

似乎
参数
是xml,因此您应该使用
loadXML
函数,请参见下面的示例:

$test = array
(
    'username' => 'vale',
    'apiaccesskey' => 'myapi',
    'action' => 'placeimeiorder',
    'requestformat' => 'JSON',
    'parameters' => '<PARAMETERS><CUSTOMFIELD>bnVsbA==</CUSTOMFIELD><ID>221</ID><IMEI>354443063506889</IMEI><MODELID></MODELID><PROVIDERID></PROVIDERID><NETWORK></NETWORK><PIN></PIN><KBH></KBH><MEP></MEP><PRD></PRD><TYPE></TYPE><LOCKS></LOCKS><REFERENCE></REFERENCE><SN></SN><SECRO></SECRO></PARAMETERS>',

    'version' => '2.3.1'
);

$html = $test['parameters'];
$doc = new DOMDocument();
$doc->loadXML($html);
$tags = $doc->getElementsByTagName('ID');
$id = $tags->item(0)->nodeValue;
$tags = $doc->getElementsByTagName('IMEI');
$imei = $tags->item(0)->nodeValue;
echo 'ID="'.$id.'" ,  IMEI="'.$imei.'"';

这将满足您的要求:(完整的工作示例)

getElementsByTagName('PARAMETERS')->项(0);
$opts=array();
foreach($p->getElementsByTagName('*')作为$item)
{
$opts[$item->nodeName]=$item->nodeValue;
}
回显“”。打印($opts,true)。“”;

你能发布你想要的输出吗?
loadHTML()
是用于HTML的。由于您的输入是XML,请改用
loadXML()
。@DishaV。更新了我的问题。@Ultimater:现在尝试了,错误消失了,但信息也消失了:(@Cyborg查看数组格式中所有元素的更新答案尼斯解决方案,完全符合我的要求:)谢谢!很好的解决方案,完全符合我的要求:)万分感谢!
$test = array
(
    'username' => 'vale',
    'apiaccesskey' => 'myapi',
    'action' => 'placeimeiorder',
    'requestformat' => 'JSON',
    'parameters' => '<PARAMETERS><CUSTOMFIELD>bnVsbA==</CUSTOMFIELD><ID>221</ID><IMEI>354443063506889</IMEI><MODELID></MODELID><PROVIDERID></PROVIDERID><NETWORK></NETWORK><PIN></PIN><KBH></KBH><MEP></MEP><PRD></PRD><TYPE></TYPE><LOCKS></LOCKS><REFERENCE></REFERENCE><SN></SN><SECRO></SECRO></PARAMETERS>',

    'version' => '2.3.1'
);

$html = $test['parameters'];
$doc = new DOMDocument();
$doc->loadXML($html);
$tags = $doc->getElementsByTagName('ID');
$id = $tags->item(0)->nodeValue;
$tags = $doc->getElementsByTagName('IMEI');
$imei = $tags->item(0)->nodeValue;
echo 'ID="'.$id.'" ,  IMEI="'.$imei.'"';
$html = $test['parameters'];
$doc = new DOMDocument();
$doc->loadXML($html);
$tags = $doc->getElementsByTagName('PARAMETERS');

$root = $doc->documentElement;
foreach($root->childNodes as $node){
    $attributes[$node->nodeName] = $node->nodeValue;
}

print_r($attributes);
<?php
$test = Array
(
    'username' => 'vale',
    'apiaccesskey' => 'myapi',
    'action' => 'placeimeiorder',
    'requestformat' => 'JSON',
    'parameters' => '<PARAMETERS><CUSTOMFIELD>bnVsbA==</CUSTOMFIELD><ID>221</ID><IMEI>354443063506889</IMEI><MODELID></MODELID><PROVIDERID></PROVIDERID><NETWORK></NETWORK><PIN></PIN><KBH></KBH><MEP></MEP><PRD></PRD><TYPE></TYPE><LOCKS></LOCKS><REFERENCE></REFERENCE><SN></SN><SECRO></SECRO></PARAMETERS>',

    'version' => '2.3.1'
);



$html = $test['parameters'];
$doc = new DOMDocument();
$doc->loadXML($html);     
$p = $doc->getElementsByTagName('PARAMETERS')->item(0);
$opts=array();
foreach($p->getElementsByTagName('*') as $item)
{
    $opts[$item->nodeName]=$item->nodeValue;
}
echo '<pre>'.print_r($opts,true).'</pre>';