关于PHP和XML的另一个问题......
根据儿童的内容排除儿童是否可行。
请参阅以下示例: 如果“title”包含单词“XTRA:”,我不希望列出这部“电影”。
这是我的PHP代码:
<? $xml = simplexml_load_file("movies.xml");
foreach ($xml->movie as $movie){ ?>
<h2><? echo $movie->title ?></h2>
<p>Year: <? echo $movie->year ?></p>
<? } ?>
这是mys XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<movies>
<movie>
<title>Little Fockers</title>
<year>2010</year>
</movie>
<movie>
<title>Little Fockers XTRA: teaser 3</title>
<year>2010</year>
</movie>
</movies>
上述代码的结果是:
<h2>Little Fockers</h2>
<p>Year: 2010</p>
<h2>Little Fockers XTRA: teaser 3</h2>
<p>Year: 2010</p>
我希望它只是:
<h2>Little Fockers</h2>
<p>Year: 2010</p>
答案 0 :(得分:1)
有两种方法可以过滤节点。第一个是XPath 1.0(libxml / SimpleXML支持的版本)
$movies = simplexml_load_file("movies.xml");
foreach ($movies->xpath('movie[not(contains(title, "XTRA:"))]') as $movie)
{
echo '<h2>', $movie->title, '</h2>';
}
在这里,我们使用contains function,即XPath等效于PHP's strpos()。不幸的是,XPath 1.0只有一些字符串函数,所有这些函数都区分大小写。因此,虽然XPath非常适合处理复杂的层次结构,但它在处理字符串时却不太好。在这种情况下,您可以回退到PHP解决方案,例如:
$movies = simplexml_load_file("movies.xml");
foreach ($movies->movie as $movie)
{
if (stripos($movie->title, 'XTRA:') !== false)
{
// skip to next iteration
continue;
}
echo '<h2>', $movie->title, '</h2>';
}