首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析动态生成的XML文件

解析动态生成的XML文件
EN

Stack Overflow用户
提问于 2013-09-03 18:00:56
回答 3查看 625关注 0票数 0

我正在将来自我们监控软件(PRTG)的API集成到我们的网站中,并试图使用一个以XML格式生成数据列表的函数。因为它是根据需要生成的,URL并不指向现有的文件。

我试着使用"simplexml_load_file“和"simplexml_load_string”来传递URL,但没有结果。我还尝试使用"file_put_contents“来首先保存文件,但也失败了,因为URL实际上并没有指向文件。

怎样才能做到这一点呢?

代码语言:javascript
复制
<?php

$prtg_url = "http://prtg.domain.net:8080/";
$prtg_user = "username";
$prtg_hash = "passwordhash";

function getSensorData($deviceid)
{
    $sensor_xml_file = $GLOBALS['prtg_url'] . "api/table.xml?content=sensors&output=xml&columns=objid,type,device,sensor,status&id=" . $deviceid . "&username=" . $GLOBALS['prtg_user'] . "&passhash=" . $GLOBALS['prtg_hash'];
    file_put_contents("sensor.xml", fopen($sensor_xml_file, 'r'));

    $sensors = simplexml_load_file("sensor.xml");

    foreach ($sensors->item as $sensor)
    {
        $sensor_ping = $sensor->ping;
        $sensor_id = $sensor->objid;
        $sensor_type = $sensor->type;
        $sensor_typeraw = $sensor->type_raw;

        echo $sensor_ping . "</br>";
        echo $sensor_id . "</br>";
        echo $sensor_type . "</br>";
        echo $sensor_typeraw . "</br>";
    }
}

getSensorData("3401");

?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-03 18:24:42

这可能与文件处理程序有关。您可以尝试在URL中使用simplexml_load_file()。例如:

代码语言:javascript
复制
$url = $GLOBALS['prtg_url']
       . "api/table.xml?content=sensors&output=xml&columns=objid,type,device,sensor,status&id=" 
       . $deviceid . "&username=" . $GLOBALS['prtg_user'] 
       . "&passhash=" . $GLOBALS['prtg_hash']);
$xml = simplexml_load_file($url);
票数 0
EN

Stack Overflow用户

发布于 2013-09-03 18:35:17

试试这个:

代码语言:javascript
复制
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $sensor_xml_file);
$xmlString = curl_exec($c);
curl_close($c);
$sensors = simplexml_load_string($xmlString);
票数 0
EN

Stack Overflow用户

发布于 2013-09-03 19:17:08

代码语言:javascript
复制
$opts = array('http' =>
  array(
    'method'  => 'GET',
    'header'  => "Content-Type: text/xml\r\n",          
    'timeout' => 60
  )
);

$context  = stream_context_create($opts);

$url = $GLOBALS['prtg_url']
   . "api/table.xml?content=sensors&output=xml&columns=objid,type,device,sensor,status&id=" 
   . $deviceid . "&username=" . $GLOBALS['prtg_user'] 
   . "&passhash=" . $GLOBALS['prtg_hash']);
$result = file_get_contents($url, false, $context);

echo $results;

这将强制在操作上进行60秒超时,这样您就可以看到它是否实际获取任何结果。如果它确实返回不完整的结果,则切换到对解析器使用XMLReader。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18598664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档