问题
This is my xml file which I'm trying to parse using PHP simplexml_load_string() function class but it only print </description> tag and rest of the xml is not returned
XML file:
<?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><p>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.</p></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>
here is my code
function parsexml($xml)
{
$xmlparse=simplexml_load_string($xml)
var_dump($xmlparse);
}
回答1:
You won't get all nodes because they use namespaces, for exmple: pl:id. To parse these you could use Xpath. first example grabs all pl:added second one gets media:hash.
You can only use the following if you know the file will always use the same prefix. If not, you have to register the namespace for each simpleXMLElement object you use.
<?
$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);
?>
When you need to register namespaces you can do the following. First you can var dump the namespaces so you know which url you need to use.
["os"]=>string(36) "http://a9.com/-/spec/opensearch/1.1/" So for os you need that url.
<?
$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);
?>
来源:https://stackoverflow.com/questions/31491098/how-to-parse-xml-with-namespace