我是PHP的新手。我正在尝试从以下XML中获取数据。现在,在我的代码$data->Address
中包含以下代码的值,即:
$data->Address = "<tolist></tolist>
<cclist>
<cc>
<contactpersonname>niraj</contactpersonname>
<name>niraj</name>
<email>stgh@gmail.com</email>
<number>+91.3212365212</number>
<prefix>Ms.</prefix>
<contactpersonprefix>Ms.</contactpersonprefix>
</cc>
<cc>
<contactpersonname>fdg</contactpersonname>
<name>admin</name>
<email>admin12@gmail.com</email>
<number>+91.4554343234</number>
<prefix>Mr.</prefix>
<contactpersonprefix>Mr.</contactpersonprefix>
</cc>
</cclist>";
现在我想提取<contactpersonname>
标签并打印出来。我怎么能这样做?
答案 0 :(得分:1)
您可以使用以下代码将XML转换为数组:
$xml = simplexml_load_string($buffer);
$array = json_decode(json_encode((array) $xml), 1);
其中$ buffer是xml字符串。
然后您可以获得如下人名:
$data->Address = $array['cclist']['cc']['contactpersonname'];
将xml转换为数组是一种快速而又脏的方法,但它可以正常工作。
答案 1 :(得分:1)
由于您的XML缺少包含所有其他标记的标记,因此您需要创建以便使解析器正常工作:
<?php
$buffer = "<tolist></tolist>
<cclist>
<cc>
<contactpersonname>niraj</contactpersonname>
<name>niraj</name>
<email>stgh@gmail.com</email>
<number>+91.3212365212</number>
<prefix>Ms.</prefix>
<contactpersonprefix>Ms.</contactpersonprefix>
</cc>
<cc>
<contactpersonname>fdg</contactpersonname>
<name>admin</name>
<email>admin12@gmail.com</email>
<number>+91.4554343234</number>
<prefix>Mr.</prefix>
<contactpersonprefix>Mr.</contactpersonprefix>
</cc>
</cclist>";
// ***** wrap the whole thing in a <root> tag...
$xml = simplexml_load_string("<root>".$buffer."</root>");
$array = json_decode(json_encode((array) $xml), 1);
echo "<pre>";
print_r($array);
echo "</pre>";
?>
结果:
Array
(
[tolist] => Array
(
)
[cclist] => Array
(
[cc] => Array
(
[0] => Array
(
[contactpersonname] => niraj
[name] => niraj
[email] => stgh@gmail.com
[number] => +91.3212365212
[prefix] => Ms.
[contactpersonprefix] => Ms.
)
[1] => Array
(
[contactpersonname] => fdg
[name] => admin
[email] => admin12@gmail.com
[number] => +91.4554343234
[prefix] => Mr.
[contactpersonprefix] => Mr.
)
)
)
)
<强>已更新强>
现在,您可以向下导航到您想去的地方
echo "<pre>";
$ccList = $array['cclist'];
$cc = $ccList['cc'];
$contacts = array();
foreach($cc as $i=>$val) {
$contacts[$i]=$val['contactpersonname'];
}
echo "first contact: " . $contacts[0] . "<br>";
echo "second contact: " . $contacts[1] ."<br>";
结果:
first contact: niraj
second contact: fdg
答案 2 :(得分:0)
试试这个..
$xml = new SimpleXMLElement($string);
$results = $xml->xpath('cclist/cc/contactpersonname');
答案 3 :(得分:0)
$xml = simplexml_load_file("note.xml");
echo $xml->contactpersonname;
这要求您从xml文件加载它。如果你已经在代码中有字符串,我建议使用正则表达式。 如果您知道数据不会被错误写入!
$pattern = '#<contactpersonname>(.*?)</contactpersonname>#';
echo preg_match ($pattern, $data->Address);