此代码查找<date_iso></date_iso>
中是否存在字符串2004,如果是,则会回显搜索字符串所在的特定元素中的一些数据。
我想知道这是否是最好/最快的方法,因为我主要关心的是速度和XML文件是巨大的。谢谢你的想法。
这是XML的一个示例
<entry ID="4406">
<id>4406</id>
<title>Book Look Back at 2002</title>
<link>http://www.sebastian-bergmann.de/blog/archives/33_Book_Look_Back_at_2002.html</link>
<description></description>
<content_encoded></content_encoded>
<dc_date>20.1.2003, 07:11</dc_date>
<date_iso>2003-01-20T07:11</date_iso>
<blog_link/>
<blog_title/>
</entry>
这是代码
<?php
$books = simplexml_load_file('planet.xml');
$search = '2004';
foreach ($books->entry as $entry) {
if (preg_match('/' . preg_quote($search) . '/i', $entry->date_iso)) {
echo $entry->dc_date;
}
}
?>
这是另一种方法
<?php
$books = simplexml_load_file('planet.xml');
$search = '2004';
$regex = '/' . preg_quote($search) . '/i';
foreach ($books->entry as $entry) {
if (preg_match($regex, $entry->date_iso)) {
echo $entry->dc_date;
}
}
?>
答案 0 :(得分:2)
如果你主要关心的是速度,你不应该为此使用simplexml或任何其他基于DOM的xml解析;使用基于SAX的解析器。此外,如果您只想进行简单的子串匹配(使用strpos),请不要使用preg_match。
如果速度不是你真正关心的问题,但是习惯是,使用XPath 2.0实现(不知道是否有一个用于PHP)或执行其他基于XPath的正则表达式匹配 - 快速谷歌显示exslt选项,或更简单的基于xpath 1.0的字符串匹配选项。
答案 1 :(得分:0)
preg_match
是一个正则表达式函数,如果你只需要进行简单的字符串比较,通常建议不要使用正则表达式。
使用preg_match
的替代方法是将<date-iso>
内容的开头与年份进行比较:
if ($search === substr($entry->date_iso, 0, 4))
因为日期始终采用相同的格式(希望如此)并从年份开始。您还可以将-
添加到搜索字符串中,然后与前5个字符进行比较。