-1

我有一个要加载单个帖子的 single.php 页面。

为此,我的 index.php 中有一些链接可以加载 single.php 页面:

<a href="single.php?blog_no=12">Post 12</a> 
<a href="single.php?blog_no=11">Post 11</a>   
<a href="single.php?blog_no=10">Post 10</a>

我在我的 single.php 页面的 url 中获取变量,我想在 xml 文件中查找(并显示)与此变量对应的元素:

<?php
if(isset($_GET["blog_no"])) {

$i = $_GET["blog_no"];

$elements = new SimpleXMLElement('data.xml', null, true);

$query = $elements->xpath(" /elements/element[@id='$i'] ");

foreach($query as $element) {

    echo $elements->element['size'];
    echo $elements->element['category'];
    echo $elements->element->title;

}
?>

这是我的 xml 文件的示例:

<elements>

<element id="12" size="square" category="portfolio">
    <tag tag="printer printing 3d apple iphone 5 bumper case"></tag>
    <icon class="icon-picture"></icon>
    <urlpage url="/contact/contact.html"></urlpage>
    <urlimage src='./Post thumbnail images/01.png'></urlimage>
    <date date="8 Apr"></date>
    <title>Minimal Bumper for iPhone 5 : Protect your iphone with a lightwheight and protect full case </title>
</element>

<element id="11" size="normal" category="portfolio">
    <tag tag="printer printing 3d apple iphone 5 case slim"></tag>
    <icon class="icon-picture"></icon>
    <urlpage url="/portfolio/11.html"></urlpage>
    <urlimage src='./Post thumbnail images/tape-dribbble.jpg'></urlimage>
    <date date="21 Jan"></date>
    <title>UltraSlim case</title>
</element>

</elements>

但没有任何效果。

4

3 回答 3

3

你非常接近它,这样做:

if (isset($_GET['blog_no'])) { 

    $id = $_GET['blog_no'];
    $xml = simplexml_load_string($x); // assume XML in $x
    $element = $xml->xpath("//element[@id='$id']")[0];
    echo "$element[size] - $element[category]<br />$element->title<br />";

} else {

    echo "No post selected!"
}

解释:

  1. 在 xpath 中,//element表示选择<element>XML 中任意位置的每个
  2. xpath 将始终返回一个数组,[0]它将仅选择第一个匹配项。这种语法适用于 PHP >=5.4,如果你低于,请告诉我,我会发布正确的代码。
  3. 不需要foreach,只能选择一个<element>,因为它id是唯一的(我猜)。

看到它工作:http ://codepad.viper-7.com/LY3itL

于 2013-05-19T00:37:49.240 回答
1

这个怎么样...

<?php
if (isset($_GET['blog_no'])) 
{
    $i = $_GET['blog_no'];

    if (file_exists('data.xml')) 
    {
        $xml = simplexml_load_file('data.xml');

        $query = '/elements/element[@id="'.$i.'"]';

        $elements = $xml->xpath($query);

        foreach ($elements as $element) 
        {
            echo $element['size'];
            echo $element['category'];
            echo $element->title;
        }
    }
    else
    {
        exit('Failed to open data.xml.');
    }
}
?>

请参阅上面的 Xpath 在这里工作:codepad.viper-7.com/QgYeqK

感谢 @michi 介绍codepad.viper-7.com

于 2013-05-18T23:09:46.130 回答
1

我找到了一个解决方案:

if(isset($_GET["blog_no"])) {

    if (file_exists('data.xml')) {

        $elements = new SimpleXMLElement('data.xml', null, true);

        foreach ($elements->element as $element) {  

            if ($element['id'] == $_GET["blog_no"]) {
                echo $element['size'];
                echo $element['category'];
                echo $element->title;

                break;
            }
        }
    }else {
        exit('Failed to open data.xml.');
    }
}

我不知道这是否是最好的方法,但效果很好。

于 2013-05-18T23:29:57.967 回答