PHP & XML: Can xpath include namespaces in the results, not just on the search?
我有一个包含名称空间的RSS源。我需要在结果中显示名称空间信息以及常规节点。我正在尝试xpath,但现在陷入困境,似乎找不到满足我需要的答案(或者至少是我理解的答案——他们可能在回答我的问题,但我不明白)。
这是我的RSS源(通过一些编辑来删除多余的节点):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"> <channel> <item> ... <link>...</link> <description>...</description> ...</author> <pubDate>05/14/2008</pubDate> <media:content url="http://www.url.com"> <media:title>...</media:title> </media:content> </item> <item> ... <link>...</link> <description>...</description> ...</author> <pubDate>06/17/2008</pubDate> <media:content url="http://www.url.com"> <media:title>...</media:title> </media:content> </item> </channel> |
到目前为止,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | if (file_exists($filePath)) { $items = simplexml_load_file($filePath); $items->registerXPathNamespace("media","http://search.yahoo.com/mrss/"); $items = $items->xpath('//item'); usort($items,"toSort"); // sorts using an included function // output the file foreach($items as $item) { echo ''; echo $item->content->attributes()->url; echo '' . $item->title . ''; echo '<p> ' . $item->description . ' </p>'; echo '<p> link . '">read more >> </p>'; echo ''; echo ' '; } } |
现在,正如我理解的那样,xpath将simplexml加载文件更改为数组类型,而且在大多数情况下,它还使搜索更容易/更快。问题是,当我使用xpath时,它会将媒体剥离:结果中的命名空间,而媒体结果是存储缩略图的位置,我需要在页面上显示图像。
我被卡住了,我不确定这是否是正确的道路了。有人能帮忙吗?
您需要使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | foreach($items as $item) { // media is an array with the media:* children of the item (ie media:content) $media = $item->children('http://search.yahoo.com/mrss/'); echo ''; echo $media[0]->attributes()->url; // media:content->attrinutes()->url echo '' . $item->title . ''; echo '<p> ' . $item->description . ' </p>'; echo '<p> link . '">read more >> </p>'; echo ''; echo ' '; } |