如何在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();
要忽略警告,请将uselibxml\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>';