我有一个单一的。php页面,我想加载个人的帖子。
为了做到这一点,我在我的index.php中有一些链接,允许加载单个。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>
你已经很接近了,像这样做:
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!"
}
解释:
- 在xpath
- 中,
//element
表示选择XML 中任意位置的每个 - xpath将始终返回一个数组,
[0]
将只选择第一个匹配。这个语法将在PHP>=5.4中工作,如果你在下面,告诉我,我会发布正确的代码。 - 不需要
foreach
,只能选择一个<element>
,因为id
是唯一的(我猜)。
<element>
。查看它的工作情况:http://codepad.viper-7.com/LY3itL
我找到了一个解决方案:
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.');
}
}
我不知道这是不是最好的方法,但是效果很好。
这个怎么样?
<?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