如何使用命名空间解析 XML?

2024-03-23

这是我的 xml 文件,我试图使用 PHP simplexml_load_string() 函数类解析它,但它只打印</description>标签和 xml 的其余部分不会返回

XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dfpvideo="http://api.google.com/dfpvideo" xmlns:media="http://search.yahoo.com/mrss/" xmlns:ngc="http://xml.natgeotv.com/fields" xmlns:ngs="http://prod.ngs.org/ngs" xmlns:ngsDebug="http://prod.ngs.org/ngs-debug" xmlns:ngsTax="http://prod.ngs.org/taxonomy" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:pl="http://xml.theplatform.com/data/object" xmlns:pl1="http://access.auth.theplatform.com/data/Account/2388557369" xmlns:pl2="http://access.auth.theplatform.com/data/Account/2423130747" xmlns:pla="http://xml.theplatform.com/data/object/admin" xmlns:plfile="http://xml.theplatform.com/media/data/MediaFile" xmlns:pllist="http://xml.theplatform.com/data/list" xmlns:plmedia="http://xml.theplatform.com/media/data/Media" xmlns:plrelease="http://xml.theplatform.com/media/data/Release" xmlns:wpf="http://prod.ngs.org/wpf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ytcp="http://www.youtube.com/schemas/cms/2.0" version="2.0">
   <channel>
      <title>NG Video</title>
      <link>http://feed.theplatform.com/f/ngs/dCCn2isYZ9N9</link>
      <description>NG Video</description>
      <os:startIndex>1</os:startIndex>
      <os:itemsPerPage>100</os:itemsPerPage>
      <pllist:entryCount>1</pllist:entryCount>
      <item>
         <pl:id>http://data.media.theplatform.com/media/data/Media/97681476000</pl:id>
         <guid isPermaLink="false">a4ad87f6-cbe4-4816-9580-b6679af0ea73</guid>
         <title>NG Live!: Sheikh of the Arctic</title>
         <description>&lt;p&gt;Having completed more solo trips to the Poles than anyone else on the planet, Børge Ousland is sometimes surprised by who he runs into crossing the vast Arctic tundra.&lt;/p&gt;</description>
         <author />
         <media:keywords />
         <media:restriction relationship="deny" type="country" />
         <media:content channels="2" samplingrate="44.1" bitrate="535.928" medium="video" duration="175.031" expression="full" fileSize="11725511" framerate="29.97" type="video/mp4" height="346" isDefault="true" url="http://link.theplatform.com/s/ngs/ekLOLGt3bemU?feed=NG%20Video" width="616">
            <media:hash algo="md5">0AF4AD25977BF50888075D3547F67173</media:hash>
            <pl:added>Sun, 22 Dec 2013 02:41:46 GMT</pl:added>
            <plfile:assetType>mpeg4</plfile:assetType>
         </media:content>
         <media:thumbnail expression="full" fileSize="79478" type="image/jpeg" height="556" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_990x556_177596483623.jpg" width="990">
            <media:hash algo="md5">60FFCE1C849440050CBCBD259EF2CE65</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:41 GMT</pl:added>
            <plfile:assetType>Poster</plfile:assetType>
            <plfile:assetType>MED</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="209762" type="image/jpeg" height="720" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720.jpg" width="1280">
            <media:hash algo="md5">08AC83096DC5F7E48A7CDE4BFA23A27A</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:30 GMT</pl:added>
            <plfile:assetType>Mezzanine Image</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="2962" type="image/jpeg" height="68" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_120x68_177597507564.jpg" width="120">
            <media:hash algo="md5">605D86F9A2B606D97A653576E6CE99D2</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:45 GMT</pl:added>
            <plfile:assetType>Thumbnail</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="23707" type="image/jpeg" height="270" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_480x270_177598019578.jpg" width="480">
            <media:hash algo="md5">73F78D0314E0CC15CDA5C36AAE4560AD</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:42 GMT</pl:added>
            <plfile:assetType>Poster</plfile:assetType>
            <plfile:assetType>X-SM</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="83905" type="image/jpeg" height="576" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_1024x576_177598019579.jpg" width="1024">
            <media:hash algo="md5">5C4B05CE487697A63F4FEC8B51009497</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:43 GMT</pl:added>
            <plfile:assetType>Poster</plfile:assetType>
            <plfile:assetType>LG</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="114846" type="image/jpeg" height="720" isDefault="false" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_1280x720_177598019580.jpg" width="1280">
            <media:hash algo="md5">31BFBD1020B2277B7E6FDD353973F263</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:43 GMT</pl:added>
            <plfile:assetType>Poster</plfile:assetType>
            <plfile:assetType>X-LG</plfile:assetType>
         </media:thumbnail>
         <media:thumbnail expression="full" fileSize="37132" type="image/jpeg" height="360" isDefault="true" url="http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_640x360_177598019582.jpg" width="640">
            <media:hash algo="md5">2654AFBE193785E29FF0533CF977A473</media:hash>
            <pl:added>Sun, 02 Mar 2014 05:26:44 GMT</pl:added>
            <plfile:assetType>Poster</plfile:assetType>
            <plfile:assetType>SM</plfile:assetType>
         </media:thumbnail>
         <pubDate>Sat, 21 Dec 2013 06:56:49 GMT</pubDate>
         <plmedia:defaultThumbnailUrl>http://pmdvod.nationalgeographic.com/NG_Video/997/323/67322_1_1280x720_640x360_177598019582.jpg</plmedia:defaultThumbnailUrl>
         <plmedia:provider />
         <pl1:youTubeInStreamStandard>true</pl1:youTubeInStreamStandard>
         <pl1:youTubeInStreamTrueView>true</pl1:youTubeInStreamTrueView>
         <pl1:youTubeInVideo>true</pl1:youTubeInVideo>
         <pl1:youTubePublic>false</pl1:youTubePublic>
         <ngs:clipTypeOld>none</ngs:clipTypeOld>
         <ngs:contentCreationDate>Mon, 13 May 2013 19:03:22 GMT</ngs:contentCreationDate>
         <ngs:network>NGS</ngs:network>
         <ngs:redirectToExternal>never</ngs:redirectToExternal>
         <ngs:requiresAuth>false</ngs:requiresAuth>
         <ngs:series>{"updated_datetime":null,"creation_datetime":null,"is_active":false,"name":"National Geographic Live","translated_names":[],"synonyms":[],"uuid":null,"notes":null,"objectType":"org.ngs.video.Show","groups":[],"url":null}</ngs:series>
         <ngs:seriesName>National Geographic Live</ngs:seriesName>
         <ngsTax:location>{"updated_datetime":"2014-04-03T19:09:42.570Z","is_active":true,"creation_datetime":"2013-11-28T20:27:32.077Z","parent":"http://taxonomy.nationalgeographic.com/api/v1/locations/eea9ad49-32fc-3a7c-bf15-cfeabdaa2fb7","geonames_uri":null,"url":"http://taxonomy.nationalgeographic.com/api/v1/locations/ff4e742f-46e6-3867-be8c-003a7af8f86c","dbpedia_uri":"http://dbpedia.org/page/Arctic","name":"Arctic","longitude":0.0,"hierarchy":"earth/arctic/","latitude":0.0,"uuid":"ff4e742f-46e6-3867-be8c-003a7af8f86c","notes":"","objectType":"org.ngs.taxonomy.GeoLocation","groups":["Place","region"],"english_name":null,"parentName":"Earth"}</ngsTax:location>
         <ngsTax:location>{"updated_datetime":"2014-05-28T20:43:43.719Z","is_active":true,"creation_datetime":"2013-11-28T20:01:26.936Z","synonyms":[null,null],"parent":"http://taxonomy.nationalgeographic.com/api/v1/locations/eea9ad49-32fc-3a7c-bf15-cfeabdaa2fb7","geonames_uri":"http://sws.geonames.org/6697173/","url":"http://taxonomy.nationalgeographic.com/api/v1/locations/d2ce52aa-c6ac-3a13-9f8c-59cb13ecb924","dbpedia_uri":null,"name":"Antarctica","translated_names":[null],"longitude":16.40626,"hierarchy":"earth/antarctica/","latitude":-78.15856,"uuid":"d2ce52aa-c6ac-3a13-9f8c-59cb13ecb924","notes":"","objectType":"org.ngs.taxonomy.GeoLocation","groups":["Place","continent"],"english_name":null,"parentName":"Earth"}</ngsTax:location>
         <ngsTax:organization>{"updated_datetime":"2014-05-02T15:37:25.776Z","creation_datetime":"2013-11-28T19:40:52.694Z","is_active":true,"name":"National Geographic Live","synonyms":[null],"uuid":"bae34d69-0601-342b-abe4-345c4c2486c4","notes":"","objectType":"org.ngs.taxonomy.Organization","english_name":null,"groups":["Organization"],"url":"http://taxonomy.nationalgeographic.com/api/v1/organizations/bae34d69-0601-342b-abe4-345c4c2486c4"}</ngsTax:organization>
         <ngsTax:slug>ousland-sheikh-bonus-nglive</ngsTax:slug>
         <ngsTax:subject>{"updated_datetime":"2014-06-04T15:56:21.047Z","definition":"","is_active":true,"creation_datetime":"2013-11-28T19:59:40.956Z","scope_note":"","synonyms":[null],"parent":"http://taxonomy.nationalgeographic.com/api/v1/subjects/83bf00d5-93bd-3cca-acc3-543652f06d52","url":"http://taxonomy.nationalgeographic.com/api/v1/subjects/58f9272e-f37b-3550-a228-a5ee119553ae","name":"Explorers","hierarchy":"exploration/explorers/","uuid":"58f9272e-f37b-3550-a228-a5ee119553ae","notes":"","objectType":"org.ngs.taxonomy.Subject","groups":["Subject"],"english_name":null,"parentName":"Exploration"}</ngsTax:subject>
         <ngsTax:subject>{"updated_datetime":"2014-01-29T14:56:08.338Z","definition":"","is_active":true,"creation_datetime":"2013-11-28T19:52:45.402Z","scope_note":"","parent":"http://taxonomy.nationalgeographic.com/api/v1/subjects/83bf00d5-93bd-3cca-acc3-543652f06d52","url":"http://taxonomy.nationalgeographic.com/api/v1/subjects/83c5f238-8dbc-373e-9d62-4deb4c59e122","name":"Expeditions","hierarchy":"exploration/expeditions/","uuid":"83c5f238-8dbc-373e-9d62-4deb4c59e122","notes":"","objectType":"org.ngs.taxonomy.Subject","groups":["Subject"],"english_name":null,"parentName":"Exploration"}</ngsTax:subject>
         <ngsTax:subject>{"updated_datetime":"2014-02-10T19:47:37.384Z","definition":"","is_active":true,"creation_datetime":"2014-01-16T17:48:21.375Z","scope_note":"","synonyms":[null,null,null],"parent":"http://taxonomy.nationalgeographic.com/api/v1/subjects/a817863e-de0f-3ffd-944d-c75ed20308ff","url":"http://taxonomy.nationalgeographic.com/api/v1/subjects/f0c33fd8-5e31-36b2-9229-b71628df3367","name":"Travel","hierarchy":"travel-and-adventure/travel/","uuid":"f0c33fd8-5e31-36b2-9229-b71628df3367","notes":"","objectType":"org.ngs.taxonomy.Subject","groups":["Subject"],"english_name":null,"parentName":"Travel and Adventure"}</ngsTax:subject>
         <ngsTax:title>NG Live!: Sheikh of the Arctic</ngsTax:title>
         <wpf:allTaxonomyId>18160</wpf:allTaxonomyId>
         <wpf:allTaxonomyId>1589</wpf:allTaxonomyId>
         <wpf:allTaxonomyId>858</wpf:allTaxonomyId>
         <wpf:altLinkedLegacyUrl />
         <wpf:author />
         <wpf:firstPublishedTime>Mon, 13 May 2013 19:11:17 GMT</wpf:firstPublishedTime>
         <wpf:id>13615</wpf:id>
         <wpf:lastPublishedTime>Mon, 03 Feb 2014 21:50:20 GMT</wpf:lastPublishedTime>
         <wpf:lineupName>Nat Geo Live 2</wpf:lineupName>
         <wpf:locationMigration>Arctic</wpf:locationMigration>
         <wpf:locationMigration>Antarctica</wpf:locationMigration>
         <wpf:metaKeyword>Nat Geo Live</wpf:metaKeyword>
         <wpf:metaKeyword>Nat Geo Live!</wpf:metaKeyword>
         <wpf:metaKeyword>lecture</wpf:metaKeyword>
         <wpf:metaKeyword>National Geographic Live</wpf:metaKeyword>
         <wpf:metaKeyword>National Geographic Live!</wpf:metaKeyword>
         <wpf:metaKeyword>NGLive</wpf:metaKeyword>
         <wpf:metaKeyword>NG Live</wpf:metaKeyword>
         <wpf:metaKeyword>Nat Geo Events</wpf:metaKeyword>
         <wpf:metaKeyword>Børge Ousland</wpf:metaKeyword>
         <wpf:metaKeyword>polar</wpf:metaKeyword>
         <wpf:metaKeyword>adventure</wpf:metaKeyword>
         <wpf:metaKeyword>explore</wpf:metaKeyword>
         <wpf:metaKeyword>exploration</wpf:metaKeyword>
         <wpf:metaKeyword>expedition</wpf:metaKeyword>
         <wpf:metaKeyword>ski</wpf:metaKeyword>
         <wpf:metaKeyword>North Pole</wpf:metaKeyword>
         <wpf:metaKeyword>loneliness</wpf:metaKeyword>
         <wpf:metaKeyword>strange</wpf:metaKeyword>
         <wpf:metaKeyword>visitor</wpf:metaKeyword>
         <wpf:metaKeyword>ice</wpf:metaKeyword>
         <wpf:metaKeyword>photo</wpf:metaKeyword>
         <wpf:metaKeywords>Nat Geo Live, Nat Geo Live!, lecture, National Geographic Live, National Geographic Live!, NGLive, NG Live, Nat Geo Events, Børge Ousland, polar, adventure, explore, exploration, expedition, ski, North Pole, loneliness, strange, visitor, ice, photo</wpf:metaKeywords>
         <wpf:organizationMigration>National Geographic Live</wpf:organizationMigration>
         <wpf:sitePath>Specials Video::Nat Geo Live::Nat Geo Live 2</wpf:sitePath>
         <wpf:siteUrlPath>/video/specials/nat-geo-live-specials/nat-geo-live-2/ousland-sheikh-bonus-nglive/</wpf:siteUrlPath>
         <wpf:subjectMigration>Explorers</wpf:subjectMigration>
         <wpf:subjectMigration>Expeditions</wpf:subjectMigration>
         <wpf:subjectMigration>Travel</wpf:subjectMigration>
         <wpf:taxonomyId>18160</wpf:taxonomyId>
         <ytcp:youTubeAssetType>web</ytcp:youTubeAssetType>
         <ytcp:youTubeSavedMatchRights>Monetize in all countries</ytcp:youTubeSavedMatchRights>
         <ytcp:youTubeSavedUsageRights>Monetize in all countries</ytcp:youTubeSavedUsageRights>
      </item>
   </channel>
</rss>

这是我的代码

   function parsexml($xml)
   {
   $xmlparse=simplexml_load_string($xml)
   var_dump($xmlparse);
   }

您不会获得所有节点,因为它们使用命名空间,例如:pl:id。要解析这些,您可以使用 Xpath。第一个例子抓住了所有pl:added第二个得到media:hash.

仅当您知道文件将始终使用相同的前缀时,才可以使用以下内容。如果没有,您必须为您使用的每个 simpleXMLElement 对象注册名称空间。

<?    
$str = '*your string here*';    
$xml = simplexml_load_string($str);

// to get pl:added 
foreach($xml->xpath('//media:content') as $element) {
    $added = $element->xpath('//pl:added');
}
//output $added
echo "<pre>";
var_dump($added);

// to get media:hash
foreach($xml->xpath('//media:thumbnail') as $element) {
    $hash = $element->xpath('//media:hash');
}
//output $hash
echo "<pre>";
var_dump($hash);
?>

当您需要注册名称空间时,可以执行以下操作。首先,您可以 var dump 命名空间,以便知道需要使用哪个 url。

["os"]=>string(36) "http://a9.com/-/spec/opensearch/1.1/"因此,对于操作系统,您需要该网址。

<?    
$str = '*your string here*';    
$xml = simplexml_load_string($str);

// to get the namespaces uncomment the next 3 lines
// $namespaces = $xml->getNamespaces(true);
// echo "<pre>";
// var_dump($namespaces);

$xml->registerXPathNamespace('media', 'http://search.yahoo.com/mrss/');

foreach($xml->xpath('//media:content') as $element) {
    $element->registerXPathNamespace('pl', 'http://xml.theplatform.com/data/object');
    $added = $element->xpath('//pl:added');
}

echo "<pre>";
var_dump($added);

$xml->registerXPathNamespace('media', 'http://search.yahoo.com/mrss/');

foreach($xml->xpath('//media:thumbnail') as $element) {
    $element->registerXPathNamespace('media', 'http://search.yahoo.com/mrss/');
    $hash = $element->xpath('//media:hash');
}

echo "<pre>";
var_dump($hash);
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用命名空间解析 XML? 的相关文章

  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 在方法/数据成员中向 WCF 添加限制

    我是 WCF 新手 我尝试对数据成员添加限制 例如在这个方法中 DataMember public string StringValue get return stringValue set stringValue value 我想设置最大
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • 通过 PEAR 安装 PHPUnit

    我安装时遇到问题PHPUnit 3 4 6 via 梨1 9 0 当我发现频道后pear phpunit de并尝试使用以下命令之一 pear 安装 phpunit PHPUnit pear 安装 alldeps phpunit PHPUn
  • 统计数据库中的注册用户数

    我想反映在我的网站上注册的人数 只有我拥有的代码不起作用 它让我知道它不可能 转换为字符串 另外 当我将其设置为在 HTML 中调用的函数时 我收到 connection 未定义的错误 require once connect php sq
  • PHP:解析器 asp 页面 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 早上好 我可以用 php 解析一个
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 将我的 Laravel 连接到外部数据库

    如何将 Laravel 连接到外部数据库 示例 我的本地计算机上有一个 Laravel 它在 xampp 上运行 我希望它连接到云服务器数据库 打开 env文件并编辑它 只需设置正确的外部数据库凭据 DB CONNECTION mysql
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • 将 aspx 文件加载到 xmldocument 中

    我希望能够将 aspx 页面加载到 XmlDocument 变量中 我怎么做 这是我尝试过的 它期望 xml 文件而不是 aspx 页面 有没有办法将aspx页面即时转换为xml文档并加载它 谢谢 string filePath C Web
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 解析 XML 标签不匹配时出错

  • 通过 IP 地址限制 Laravel 错误日志

    When debug被设定为true在 Laravel 的app config php有什么方法可以限制结果Whoops包含对某些 IP 地址的堆栈跟踪的错误页面 并且不在该列表中的 IP 显示特定视图 Thanks 没有内置 但是你可能可
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但

随机推荐