从 xml url 中提取值 [英] Extracting the values from a xml url

查看:37
本文介绍了从 xml url 中提取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从这个网址打印 Identificador 标签内的值 https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=1030123459,但我根本没有得到任何输出.

I need to print the values inside Identificador tags from this Url https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=1030123459, but I get no output at all.

function get_xmlcontent(StdClass $data)
{
    $year       = $data->year;
    $course     = $data->clipid;
    $typeperiod = $data->typeperiod;    

    if ($typeperiod == 's'||$typeperiod == 'a') {
        $period = $data->period;
    } else if ($typeperiod == 't') {
        $period = $data->trimester;
    }

    //file from CLIP
    $xmlUrl = 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=1030123459';

    $xmlStr = download_file_content($xmlUrl);
    $xmlObj = simplexml_load_string($xmlStr);
    foreach ($xmlObj->unidade_curricular->inscritos->aluno as $aluno) {
        echo $result = $aluno->identificador;
    }
}

我该如何解决这个问题?

How can I solve this?

推荐答案

我没有使用自定义的 download_file_content() 函数,而是使用 file_get_contents() 并将 xml 字符串传递给 SimpleXMLElement.希望这为您指明了正确的方向.考虑将功能拆分为两种方法:a) buildURL() b) fetchXMLContent().

Instead of your custom download_file_content() function, i used file_get_contents() and passed the xml string on to SimpleXMLElement. Hope that points you in the right direction. Consider splitting the functionality in two methods: a) buildURL() b) fetchXMLContent().

$xmlContent = file_get_contents('https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=1030123459');
$xmlObj = new SimpleXMLElement($xmlContent);

foreach($xmlObj->unidade_curricular->inscritos->aluno as $aluno){
    $result= $aluno->identificador;
    echo $result;
}

回答您的评论:这涉及另一个问题!您的域是 HTTPS 域,因此您需要告诉 cURL 如何处理它.我创建了一个示例,它解决了所有提到的问题并演示了cURL 用法.

To answer your comment: that involves another problem! Your domains is a HTTPS domain, so you need to tell cURL how to handle that. I've created an example, which solves all the mentioned problems and demonstrates cURL usage.

<?php

function buildURL($year, $period, $typeperiod, $course)
{
    return 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=1030123459';
}

function doRequest_with_FileGetContents($url)
{
   return file_get_contents($url);
}

function doRequest_with_cURL($url) {
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL, $url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

  // your domain is a HTTPS domain, so you need to tell curl how to deal with SSL verifications
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

  $data=curl_exec($ch);
  curl_close($ch);

  return $data;
}

function processXML($xmlContent)
{
   $xmlObj = new SimpleXMLElement($xmlContent);

    foreach($xmlObj->unidade_curricular->inscritos->aluno as $aluno){
       $result= $aluno->identificador;
       echo $result;
    }
}

// Ok. Lets test..

// some testing values, i guess these will come from a formular
$year = '2013';
$period = '1';
$typeperiod = 's';
$course = '8145';

// a) build URL
$url = buildURL($year, $period, $typeperiod, $course);

// b) fetch content
$content_a = doRequest_with_cURL($url);

$content_b = doRequest_with_FileGetContents($url);

// c) process content (should be the same)
echo "\nRequest with cURL\n";
processXML($content_a);

echo "\nRequest with file_get_contents()\n";
processXML($content_b);

这篇关于从 xml url 中提取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆