Php和XML feed。从哪儿开始?需要一些好主意的想法

时间:2010-10-05 19:16:41

标签: php xml

总之,我的头脑越来越高,但这次我真的在推动自己。呵呵。 我的新项目没有任何代码,因为我不确定从哪里开始。

以下是我需要做的背景信息。 我正在尝试做的是我的(成人)wecam广告网站之一的“状态指示器”。 在线表演者列在XML(online.xml)中。这很公平,可以退出,但这里是我停止的地方。 我需要做的是一个简单的PHP脚本(例如status.php?id = performername),它将检查表演者名称是否在xml列表中,并给我一个在线/离线回复。所有好的想法和帮助都非常受欢迎。 :)

XML示例(已清理的版本)

<webcams_online>
<webcam account="a6632" sex="F" star="N" nickname="18brunette" priority="11289" preview_webcam="6632_webcam.jpg" number_visitors="none">
</webcam>

<webcam account="a18205" sex="F" star="N" nickname="Attraction" priority="11155" preview_webcam="18205_webcam.jpg" number_visitors="none">
</webcam>
</webcams_online>

3 个答案:

答案 0 :(得分:3)

最简单的方法是使用DOM和XPath:

public function isOnline($performer)
{
    $dom = new DOMDocument;
    $dom->load('webcams.xml');
    $xPath = new DOMXPath($dom);
    $nodes =  $xPath->query(sprintf('//webcam[@nickname="%s"]', $performer));

    return (bool) $webcams->length;
}

以上使用DOM扩展来加载具有网络摄像头状态的XML文件。然后,它会搜索<webcam>元素,其中nickname属性包含已传递的$performer名称。假设每个执行者昵称只有一个凸轮,如果没有匹配XPath的元素,则此方法将返回FALSE,如果匹配,则此方法将返回TRUE

您没有指定脚本的响应方式。假设您通过Ajax检查凸轮,一个简单的status.php脚本可能如下所示:

<?php

// Clean input to script
$performer = filter_input(
    INPUT_GET, 'performer', FILTER_SANITIZE_STRING,
    FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);

// Try to find webcam with nickname of performer in online cams XML
$dom = new DOMDocument;
$dom->load('webcams.xml');
$xPath   = new DOMXPath($dom);
$webcams = $xPath->query(sprintf('//webcam[@nickname="%s"]', $performer));

// send a JSON response depending on the search result
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

// create a JSON response for the calling client
if( $webcams->length === 0 ) {
    echo json_encode(array('status' => 'offline'));
} else {
    $webcam = $webcams->item(0);
    echo json_encode(array(
        'status'   => 'online',
        'data' => array(
            'account'  => $webcam->getAttribute('account'),
            'sex'      => $webcam->getAttribute('sex'),
            'star'     => $webcam->getAttribute('star'),
            'nickname' => $webcam->getAttribute('nickname'),
            'priority' => $webcam->getAttribute('priority'),
            'preview'  => $webcam->getAttribute('preview_webcam'),
            'visitors' => $webcam->getAttribute('number_visitors')
        )
    ));
};

答案 1 :(得分:1)

这实际上取决于信息的格式。如果您提供示例xml文件,我们可以更具体。

基础知识是:

  1. 使用SimpleXML(load_file或load_string)
  2. 加载文件
  3. 循环显示包含姓名的节点,以查看此人是否在线

答案 2 :(得分:1)

这样的功能应该适合你

function check_user_online($file, $username)
{
    $xml = simplexml_load_file($file);

    foreach($xml->webcam as $cam)
    {
        if ($cam['nickname'] == $username)
        {
            return true;
        }
    }

    return false;
}

只需调用check_user_online($filename, $performer);并将$ filename替换为XML文件的路径,并将$ performer替换为执行者的昵称。根据是否找到表演者,它会返回真或假。