PHP RESTful服务

时间:2014-01-24 21:22:42

标签: php xml rest

经过一番建议后。请原谅我用来描述事物的任何语言,这可能不是正确的术语。

基本上负责使用php创建REST服务。我有一个XML文件。下面的代码段。

<?xml version='1.0' encoding='UTF-8'?>

<crimes year='2013' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="stats.xsd">
    <data country='England' region='North East Region' area='Cleveland'>
        <heading name='Victim-based crime'>
            <category name='Violence against the person'>
                <number type='Homocide' total='3'/>
                <number type='Violence with injury' total='3737'/>
                <number type='Violence without injury' total='2630'/>
            </category>
            <category type='Sexual offences' total='563' /> 
            <category type='Robbery' total='259' />
            <category type='Theft offences'>
                <number type='Burglary' total='4561' />
                <number type='Domestic Burglary' total='2054' />
                <number type='Non-domestic burglary' total='2057' />
                <number type='Vehicle offences' total='3329' />
                <number type='Theft from the person' total='372' />
                <number type='Bycycle theft' total='994' />
                <number type='Shoplifting' total='5174' />
                <number type='All other theft offences' total='5381' />
            </category>
            <category type='Criminal damage and arson' total='7934' />
        </heading>  
        <heading name='Other crimes against society'>
            <category type='Drug offences' total='2116' />
            <category type='Possession of weapons offences' total='267' />
            <category type='Public order offences' total='1342' />
            <category type='Miscellaneous crimes against society' total='405' />
            <category type='Fraud' total='405' />
        </heading>
    </data>
</crimes>

它包含多个数据集。

所以我尝试使用simpleXML在XML文件上显示内容。

header('Content-Type: text/plain');

$xml=simplexml_load_file("stats.xml");
print_r($xml);

代码显示数组,每个数组包含XML文件中的一个元素。我也尝试过使用DOM,但是我被告知easyXML是要走的路,但到目前为止这是建议的程度。

我基本上希望根据在网址中输入的内容从XML文件中提取内容,例如http://www.url.com/crimes/country/使用GET并以与输入相关的XML格式显示内容。

我设法使用:

显示xml文件中的第一个元素
$xml = simplexml_load_file("stats.xml");

    echo "<h2>".$xml->getName()."</h2><br />";

    foreach($xml->children() as $crimes)
    {
        echo "Country : ".$crimes->attributes()->country."<br />";
        echo "Region : ".$crimes->attributes()->region."<br />";
        echo "Area : ".$crimes->attributes()->area."<br />"; 
    }

但是只显示<data..>并且它没有使用GET方法。

我完全迷失了,我甚至不知道从哪里开始,我已经在谷歌搜索了几天,但我什么都没发现。任何建议或提示都会很棒。

1 个答案:

答案 0 :(得分:0)

我认为动态汇编XPath查询最简单,然后使用->xpath()方法运行它。

这样的事情对你上面的特定例子有用:

$xpath = sprintf(
    '/crimes/data[@country="%s"][@area="%s"]/heading/category/number[@type="%s"]',
    $_GET['name'],
    $_GET['area'],
    $_GET['type']
);

$nodeList = $xml->xpath($xpath);
echo 'Number: ', $nodeList[0]['total'];

工作示例:http://ideone.com/Smh1ax

您可能需要添加逻辑来以不同方式构建查询,以根据URL中提供的变量来获取其他数据。希望这能让你走上正轨。