简体   繁体   English

PHP处理XML数据

[英]PHP Process XML Data

I'm writing to read a xml from a wbsite. 我正在写要从wbsite读取xml。

$jtype = $job_type == 1 ? 'fulltime' : $job_type == 2 ? 'parttime' : $job_type == 3 ? 'contract':'';
    $xml ="http://api.indeed.com/ads/apisearch?";
    $xml .="publisher=9628233567417007";
    $xml .="&q=".$q; //Query. By default terms are ANDed. To see what is possible, use our advanced search page to perform a search and then check the url for the q value.
    $xml .="&l=".$location; //Location. Use a postal code or a "city, state/province/region" combination.
    $xml .="&sort="; //Sort by relevance or date. Default is relevance.
    $xml .="&radius=30"; //Distance from search location ("as the crow flies"). Default is 25.
    $xml .="&st=employer"; //Site type. To show only jobs from job boards use 'jobsite'. For jobs from direct employer websites use 'employer'.
    $xml .="&jt=".$jtype ; //Job type. Allowed values: "fulltime", "parttime", "contract", "internship", "temporary".
    $xml .="&start=0"; //Start results at this result number, beginning with 0. Default is 0.
    $xml .="&limit=10"; //Maximum number of results returned per query. Default is 10
    $xml .="&fromage=".$within; //Number of days back to search.
    $xml .="&filter=1"; //Filter duplicate results. 0 turns off duplicate job filtering. Default is 1.
    $xml .="&latlong=1"; //If latlong=1, returns latitude and longitude information for each job result. Default is 0.
    $xml .="&co=GB";//arch within country specified. Default is us. See below for a complete list of supported countries. 
    $xml .="&v=2";

    $xmlData = new SimpleXMLElement( $xml, null, true);
    $xmls = $xmlData->xpath('results/result');

    $jIndeed = array();
    $iIndeed=1;
    if( !empty($xmls) )
    {
        foreach ( $xmls as $xml )
        {
            $created_at = strftime( dateFormat ,strtotime((string)$xml->date));
            $jIndeed[$iIndeed]['job_id']            = (string)$xml->jobkey;
            $jIndeed[$iIndeed]['jobTitle']          = cleanText( (string)$xml->jobtitle );
            $jIndeed[$iIndeed]['var_name']          = seoUrl( (string)$xml->jobtitle);
            $jIndeed[$iIndeed]['jobDescription']    = (string)$xml->snippet;
            $jIndeed[$iIndeed]['created_at']        = $created_at;
            $jIndeed[$iIndeed]['job_type']          = (string)$xml->typeName;
            $jIndeed[$iIndeed]['companyName']       = (string)$xml->company;
            $jIndeed[$iIndeed]['location']          = (string)$xml->formattedLocation;
            $iIndeed++;
        }
        $smarty->assign('searchIndeed', $jIndeed);
    }

When I run this on local machine it works fine but when I upload to my site I get error 500 "Page cannot be display" 当我在本地计算机上运行此程序时,它工作正常,但是当我上传到我的站点时,出现错误500“页面无法显示”

I have change the memery to 20MB and chnage the post to 1000 but still failing. 我已将内存更改为20MB,并将帖子更改为1000,但仍然失败。 I think my host has limit, it does not make any differece when i set in php is still failed, 我认为我的主机有限制,当我在php中设置仍然失败时,它没有任何区别,

Does any have xml class I can used to process this website xml. 有没有我可以用来处理此网站xml的xml类。

UPDATE: 更新:

After Putting this ini_set('display_errors', E_ALL); 放置此ini_set('display_errors', E_ALL);

Warning: SimpleXMLElement::__construct(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /.../indeedXMLSearch.php on line 44 警告:SimpleXMLElement :: __ construct():在服务器配置中,第44行的/.../indeedXMLSearch.php中的allow_url_fopen = 0禁用了http://包装器
Warning: SimpleXMLElement::_ construct(http://api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&latlong=1&co=GB&v=2): failed to open stream: no suitable wrapper could be found in /.../indeedXMLSearch.php on line 44 Warning: SimpleXMLElement:: _construct(): I/O warning : failed to load external entity "http://api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&latlong=1&co=GB&v=2" in /.../indeedXMLSearch.php on line 44 Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /.../indeedXMLSearch.php:44 ... 警告:SimpleXMLElement :: _ Construct(http://api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&lat=1=1&co=GB&v= 2):无法打开流:在第44行的/.../indeedXMLSearch.php中找不到合适的包装警告:SimpleXMLElement :: _construct():I / O警告:无法加载外部实体“ http:// api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&latlong=1&co=GB&v=2“在/.../indeedXMLSearch.php中第44行致命错误:/.../indeedXMLSearch.php:44中未捕获的异常'Exception',消息为'String无法解析为XML'...

For security season, php disable fopen url in default setting. 为了安全起见,php在默认设置中禁用了fopen url。 You 'd better get xml file content according php curl lib and save it to local file. 您最好根据php curl lib获取xml文件内容,并将其保存到本地文件中。

Then use new SimpleXMLElement ($localxml) . 然后使用new SimpleXMLElement ($localxml)

Example Code: 示例代码:

$xml = "http://....";

$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $xml);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$xmlcontent = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

file_put_contents('/tmp/xmlfile', $xmlcontent);
$xmlelement = new SimpleXMLElement( $xml, null, true);
.....

Try this 尝试这个

$xmlData  = simple_xml_load_file(file_get_contents($xml));
print_r($xmlData);

instead of 代替

 $xmlData = new SimpleXMLElement( $xml, null, true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM