这是我的PHP代码:
<?php
if (array_key_exists("site", $_GET) && $_GET["site"] != "" )
{
$url = $_REQUEST['site'];
$url = " http://api.mywot.com/0.4/public_query2?target=";
$result= $url.urlencode($url);
$process = curl_init($result);
//init curl connection
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_RETURNTRANSFER,1);
curl_setopt($process,CURLOPT_CONNECTTIMEOUT,1);
$resp = curl_exec($process);
curl_close($process);
header('Content-Type: text/xml');
$xml = new SimpleXMLElement($resp);
}
?>
假设xml:
<?xml version="1.0" encoding="UTF-8"?>
<query target="example.com">
<application name="0" r="89" c="44"/>
<application name="1" r="89" c="46"/>
<application name="2" r="92" c="47"/>
<application name="4" r="93" c="48"/>
</query>
我知道如何阅读这种xml文件
<Status>
<code>200</code>
<request>geocode</request>
</Status>
$status = (int) $xml->Status->code;
上面的xml有重复的标签,例如application
,我该如何读取某些标签?
答案 0 :(得分:2)
application
个项目可以作为数组访问,例如:$xml->application[3]
$x = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>
<query target="example.com">
<application name="0" r="89" c="44"/>
<application name="1" r="89" c="46"/>
<application name="2" r="92" c="47"/>
<application name="4" r="93" c="48"/>
</query>');
print_r($x); // View entire XML structure
print_r($x->application[1]); // View the 2nd application item
echo $x->application[1]['c']; // Get 'c' attribute from 2nd item (46)
答案 1 :(得分:0)
$xml->application[0];
$xml->application[1];
$xml->application[2];
...
答案 2 :(得分:0)
除了其他答案,您还可以使用XPath从XML结构中获取某些元素:
$xml->xpath('/query/application[@name=2]')
将返回包含属性<application>
的{{1}}元素。有关条件的详细信息,请参阅w3schools XPath tutorial。请记住,使用SimpleXML的PHP中的XPath有点慢,即使你没有注意到它,除非你有一个包含数千个元素的大型文档。这是寻找不那么大的XMl结构的好方法。如果必须处理大型集,则可能需要切换到DOMDocument。它不是那么简单易用,但它在XPath方面具有更高的性能。
<强>更新强>
我看到你正试图解析完整的响应为XMl。但$ resp实际上会包含FULL响应,我的意思是包含标题。当然它不会正确解析。你需要做的是:
name = 2