如何用PHP解析XML的Media:Content?

2023-11-24

我在以下位置找到了有关如何完成大部分工作的精彩教程:

https://www.developphp.com/video/PHP/simpleXML-Tutorial-Learn-to-Parse-XML-Files-and-RSS-Feeds

但我不明白如何从提要中提取媒体:内容图像。我已经阅读了尽可能多的信息,但我仍然陷入困境。

ie: 如何使用 SimpleXML 获取媒体:内容这建议使用:

foreach ($xml->channel->item as $news){
    $ns_media = $news->children('http://search.yahoo.com/mrss/');
    echo $ns_media->content; // displays "<media:content>"}

但我无法让它工作。

这是我正在尝试解析的脚本和提要:

<?php
$html = "";
$url = "http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC";
$xml = simplexml_load_file($url);
for($i = 0; $i < 10; $i++){
    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $description = $xml->channel->item[$i]->description;
    $pubDate = $xml->channel->item[$i]->pubDate;

    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "$description";
    $html .= "<br />$pubDate<hr />";
}
echo $html;
?>

我不知道在脚本的哪里添加这段代码才能使其工作。老实说,我已经浏览了几个小时,但找不到可以解析媒体:内容的工作脚本。

有人可以帮忙吗?

=======================

UPDATE:

感谢 fusion 3k,我得到了最终的代码:

<?php
$html = "";
$url = "http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC";
$xml = simplexml_load_file($url);
for($i = 0; $i < 5; $i++){

    $image = $xml->channel->item[$i]->children('media', True)->content->attributes();
    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $description = $xml->channel->item[$i]->description;
    $pubDate = $xml->channel->item[$i]->pubDate;

    $html .= "<img src='$image' alt='$title'>";
    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "$description";
    $html .= "<br />$pubDate<hr />";
}
echo $html;
?>

基本上我所需要的只是这条简单的线:

$image = $xml->channel->item[$i]->children('media', True)->content->attributes();

不敢相信,对于非技术人员来说,在阅读了数十篇帖子和文章后,在网上找到这些信息是如此困难。好吧,希望这对像我这样的其他人有好处:)


要获取“url”属性,请使用->attribute() syntax:

$ns_media = $news->children('http://search.yahoo.com/mrss/');

/* Echoes 'url' attribute: */
echo $ns_media->content->attributes()['url'];
// in php < 5.5: $attr = $ns_media->content->attributes(); echo $attr['url'];

/* Catches 'url' attribute: */
$url = $ns_media->content->attributes()['url']->__toString();
// in php < 5.5: $attr = $ns_media->content->attributes(); $url = $attr['url']->__toString();

命名空间说明:

The ->children()参数不是 XML 的 URL,而是一个命名空间 URI.

XML 命名空间用于在 XML 文档中提供唯一命名的元素和属性:

<xxx>       Standard XML tag
<yyy:zzz>   Namespaced tag
 └┬┘ └┬┘
  │   └──── Element Name
  └──────── Element Prefix (Namespace Identifier)

所以,就你而言,<media:content>是命名空间“media”的“内容”元素。命名空间元素必须具有关联的命名空间 URI,作为父节点的属性,或者最常见的是根元素的属性:该属性具有以下形式xmlns:yyy="NamespaceURI"(在你的情况下xmlns:media="http://search.yahoo.com/mrss/"作为根节点的属性<rss>).

最终,上述$news->children( 'http://search.yahoo.com/mrss/' )意味着“检索所有子元素http://search.yahoo.com/mrss/作为命名空间 URI;另一种最容易理解的语法是:$news->children( 'media', True ) (True意思是“被视为前缀”)。

返回示例中的代码,检索所有内容的通用语法第一项的有前缀的孩子media is:

$xml = simplexml_load_file( 'http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC' );
$xml->channel->item[0]->children( 'http://search.yahoo.com/mrss/' );

或(相同的结果):

$xml = simplexml_load_file( 'http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC' );
$xml->channel->item[0]->children( 'media', True );

您的新代码:

如果你想展示<media:content url>页面中每个元素的缩略图,按以下方式修改原始代码:

(...)
$pubDate = $xml->channel->item[$i]->pubDate;
$image   = $xml->channel->item[$i]->children( 'media', True )->content->attributes()['url'];
// in php < 5.5:
// $attr  = $xml->channel->item[$i]->children( 'media', True )->content->attributes();
// $image = $attr['url'];

$html   .= "<a href='$link'><h3>$title</h3></a>";
$html   .= "<img src='$image' alt='$title'>";
(...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用PHP解析XML的Media:Content? 的相关文章

随机推荐

  • 桌面版 flutter,Visual Studio 2022 问题

    当我尝试在 Windows 上运行 flutter 应用程序时收到此消息 Building Windows application CMake Error at CMakeLists txt 2 project Generator Visu
  • Couchdb数据库-每用户设计文档管理

    我正在评估 Couchdb 作为一个有很多用户的 Web 应用程序 如果我使用每用户数据库模型 想必每个数据库中的设计文档都是相同的 我没有发现任何提及作用于多个数据库的 全局 设计文档 或任何可以轻松更改所有用户数据库的设计文档的工具 这
  • 在 C 中创建数组

    我正在尝试用 C 创建一个 UNIX shell 如果是用 Java 那将是小菜一碟 但我对 C 没有那么丰富的经验 C 中的数组让我有点困惑 我不确定如何声明或访问某些数据结构 我想创建一个字符串来在每一行中读取 很简单 只是一个字符数组
  • 自定义按键绑定 Xcode 4?

    不久前我问了一个问题Xcode 中的自定义键绑定 我最终重新创建了一些TextMate 的按键命令在 Xcode 中 刚刚更新到 Xcode 4 PBKeyBinding 文件似乎不再有任何作用 自定义键绑定 特别是 Xcode 4 的新热
  • Windows Server 2012 中的 AWS EFS [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有人曾经让 Windows Server 使用 Windows NFS 4 1 客户端连接到 AWS EFS 卷吗 我知道它不受支持 但想知道是否有人做过 或通过其他客户端或实用程序
  • 从另一个类调用类方法

    有没有办法从另一个类调用一个类的方法 我正在寻找类似 PHP 的东西call user func array 这是我想要发生的事情 class A def method1 arg1 arg2 class B A method1 1 2 更新
  • 解释 Visual Studio 2010 及更高版本、WinForms 和 WPF 中的严重错误

    尝试将以下代码放入其中LoadWinForms 的事件处理程序或Loaded对于 WPF Dim doc As New XmlDocument Dim nsmgr As New XmlNamespaceManager Nothing thi
  • jquery tmpl 格式化日期?

    我正在使用 jquery tmpl 在表中显示一堆结果 其中之一是我在模板中使用它输出的日期 td class textAlignRight EffectiveDate td 但它的格式如 Date 1245398693390 我怎样才能改
  • 在 r 中读取大文本文件

    我想读取一个包含 110 000 000 行和 8 列的大型视频文件 这些列由 2 个整数列和 6 个逻辑列组成 分隔符 在文件中使用 我尝试使用read big matrix这花了很长时间 我也尝试过dumpDf并且内存不足 我试过ff我
  • Safari 对子像素计算进行舍入

    我有一个连续占用 829px 的容器 并且具有相同大小的背景图像 我在该容器中有一个 div 它根据 829px 容器计算其宽度 在 safari 上 div 宽度约为 173 8px 但由于 safari webkit 向下舍入 其宽度被
  • 如何使用 node.js 响应传入的 Twilio 呼叫和 SMS 消息?

    在我的应用程序中 我使用 twilio node js 模块来接收短信 发送短信 接听电话和拨打电话 我弄清楚了如何发送短信和拨打电话 但我不知道如何回复来电和短信 我如何使用节点来响应这些 当 Twilio 收到对您的电话号码的呼叫时 它
  • 如何将 Jackson mixin 添加到阅读器而不是对象映射器?

    我有一个对象 我想在程序的一部分中使用属性进行序列化 但在不同的部分中没有属性 我还有一个经过广泛定制的 ObjectMapper 用于两种序列化 我的第一个倾向是使用 Mixin 来调整是否显示属性 但似乎您只能将它们放在 ObjectM
  • 运行gradle任务时如何在命令行中传递多个参数?

    我有一个由 gradle 任务运行的 java 和 groovy 类 我已设法使其工作 但我不喜欢在命令行中传递参数的方式 这是我目前通过命令行执行此操作的方法 gradle runTask Pmode doStuff username p
  • Java FileLock 是 POSIX Advisory (fcntl) 锁吗

    我有一个使用 POSIX 咨询锁锁定文件的 C 程序 也就是说 它使用POSIX fcntl系统调用用于锁定操作 我希望 Java 程序能够与 C 程序进行互操作 因此我希望我的 Java 程序也使用 POSIX 咨询锁 Java 中的文件
  • 使用 jQuery .on() 绑定到准备就绪并同时调整大小

    这适用于在就绪和调整大小时运行相同的代码 document ready function window resize function Stuff in here happens on ready and resize resize Tri
  • 正在使用“out”不好的做法

    我刚刚添加了一个outbool 参数到我编写的方法中 以便在我的 UI 中收到警告 我使用了 out 而不是让方法本身返回 false true 因为这意味着做一点事失败 成功 我的想法是warnUser将指示警告实际上是什么 而无需查看该
  • 如何将脚本和 CSS 挂接到 中?

    我正在制作的模块的问题是它会生成一个 javascript 片段 因此我无法使用操作将其挂接到 HTML 部分 因为该操作要求我有一个 JS 文件 如果我是 请纠正我 错误的 我可以通过哪些方法将 JavaScript 片段放入标签中 我正
  • Java + MySQL 完整性违规处理

    我使用 JDBC mysql 数据库 编写 Java 程序 当我违反 mysql 完整性时 例如 我尝试插入相同的主键值 我发现SQL 异常 我应该以永远不会发生的方式编写它 例如 首先布尔函数检查主键值是否不在数据库中 然后调用插入 或者
  • 是否可以使用 document.querySelector() 获取多个 ID?

    是否可以使用 document querySelector 查找多个 ID 例如 div1 div2 div3 如果没有那么有替代解决方案吗 是的 你可以这样做 首先 为了检索multiple元素 你必须使用querySelectorAll
  • 如何用PHP解析XML的Media:Content?

    我在以下位置找到了有关如何完成大部分工作的精彩教程 https www developphp com video PHP simpleXML Tutorial Learn to Parse XML Files and RSS Feeds 但