Parsing a foursquare KML venue feed with simpleXML - php

I am trying to parse a KML venue feed from foursqare with simpleXML but I cannot get the nested-in-desctription venue url. It looks like simpleXML strips it.
In detail:
The foursqare kml feed looks like this:
<kml>
<Folder>
<name>foursquare checkin history for X</name>
<description>foursquare checkin history for X</description>
<Placemark>
<name>somevenuename</name>
<description>#somevenuename- a foursqareshout!</description>
<updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
<published>Wed, 02 Nov 11 17:00:05 +0000</published>
<visibility>1</visibility>
<Point>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
</Point>
</Placemark>
etc ...
My call to simpleXMl is ... well, simple:
$venue_items = simplexml_load_file($venue_kml_file);
Any ideas who to preserve the html in description?

They're right. This is invalid XML. However, I wrote a workaround for you using regex. It may be a bit hacky, but you can only make due with what you've been given, so here it is:
$xml_string = <<<XML_STRING
<kml>
<Folder>
<name>foursquare checkin history for X</name>
<description>foursquare checkin history for X</description>
<Placemark>
<name>somevenuename</name>
<description>#somevenuename- a foursqareshout!</description>
<updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
<published>Wed, 02 Nov 11 17:00:05 +0000</published>
<visibility>1</visibility>
<Point>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
</Point>
</Placemark>
</Folder>
<Folder>
<name>foursquare checkin history for X</name>
<description>foursquare checkin history for X</description>
<Placemark>
<name>somevenuename</name>
<description>#somevenuename- a foursqareshout!</description>
<updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
<published>Wed, 02 Nov 11 17:00:05 +0000</published>
<visibility>1</visibility>
<Point>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
</Point>
</Placemark>
</Folder>
</kml>
XML_STRING;
preg_match_all( '%<Placemark>(.*?)</Placemark>%s', $xml_string, $placemarks, PREG_SET_ORDER );
for( $x = 0; $x < sizeof($placemarks); $x++ ){
preg_match_all('%<description>(.*?)</description>%s', $placemarks[$x][1], $descriptions, PREG_SET_ORDER );
for( $y = 0; $y < sizeof($descriptions); $y++ ){
echo $descriptions[$y][1];
}
}
Hope that helps...

Related

Search for the word (BRL) in tag and output the entire contents of this tag

There are several tags in the xml file. How can I find an tag with the content in "BRL"?
i have tried
$usd_brazilRate = $usdXML->item[89]->title;<br>
$usd_brazilDate = $usdXML->item[89]->pubDate;<br>
but the item number (position) always changes
example cropped xml content:
<channel>
<item>
<title>1 USD = 64.78833120 RUB</title>
<link>http://www.floatrates.com/usd/rub/</link>
<description>1 U.S. Dollar = 64.78833120 Russian Rouble</description>
<pubDate>Thu, 2 May 2019 12:00:02 GMT</pubDate>
<baseCurrency>USD</baseCurrency>
<baseName>U.S. Dollar</baseName>
<targetCurrency>RUB</targetCurrency>
<targetName>Russian Rouble</targetName>
<exchangeRate>64.78833120</exchangeRate>
<inverseRate>0.01543488</inverseRate>
<inverseDescription>1 Russian Rouble = 0.01543488 U.S. Dollar</inverseDescription>
</item>
<item>
<title>1 USD = 3.92245587 BRL</title>
<link>http://www.floatrates.com/usd/brl/</link>
<description>1 U.S. Dollar = 3.92245587 Brazilian Real</description>
<pubDate>Thu, 2 May 2019 12:00:02 GMT</pubDate>
<baseCurrency>USD</baseCurrency>
<baseName>U.S. Dollar</baseName>
<targetCurrency>BRL</targetCurrency>
<targetName>Brazilian Real</targetName>
<exchangeRate>3.92245587</exchangeRate>
<inverseRate>0.25494232</inverseRate>
<inverseDescription>1 Brazilian Real = 0.25494232 U.S. Dollar</inverseDescription>
</item>
<item>
<title>1 USD = 0.76733706 GIP</title>
<link>http://www.floatrates.com/usd/gip/</link>
<description>1 U.S. Dollar = 0.76733706 Gibraltar pound</description>
<pubDate>Thu, 2 May 2019 12:00:02 GMT</pubDate>
<baseCurrency>USD</baseCurrency>
<baseName>U.S. Dollar</baseName>
<targetCurrency>GIP</targetCurrency>
<targetName>Gibraltar pound</targetName>
<exchangeRate>0.76733706</exchangeRate>
<inverseRate>1.30320826</inverseRate>
<inverseDescription>1 Gibraltar pound = 1.30320826 U.S. Dollar</inverseDescription>
</item>
</channel>
$usdXML = simplexml_load_file("http://www.floatrates.com/daily/usd.xml") or die("Failed to load");
$usd_brazilRate = $usdXML->item->title;
$usd_brazilDate = $usdXML->item->pubDate;
output
1 USD = 3.92245587 BRL
Thu, 2 May 2019 12:00:02 GMT
You can use XPath:
$brazil = $usdXML->xpath('/channel/item[targetCurrency="BRL"]');
print($brazil[0]->description . "\n");
print($brazil[0]->pubDate . "\n");

Get category from wordpress rss [php]

Hi i need help to get all categories from rss.
This is ex. of my rss feed:
<item>
<title>Coca-Cola</title>
<link>https://www.tralaaa.com/coca-cola/</link>
<comments></comments>
<pubDate>Fri, 01 Dec 2017 11:36:40 +0000</pubDate>
<dc:creator><![CDATA[Admin]]></dc:creator>
<category><![CDATA[cat1]]></category>
<category><![CDATA[cat2]]></category>
<category><![CDATA[cat3]]></category>
<category><![CDATA[cat4]]></category>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[]]></content:encoded>
</item>
I try with $cat = $item->category(0); but give me the error
Call to undefined method SimpleXMLElement::category()
You cant access category using () parenthesis, you need to use [], like this:
$xml = new SimpleXMLElement(
'<item>
<title>Coca-Cola</title>
<link>https://www.tralaaa.com/coca-cola/</link>
<comments></comments>
<pubDate>Fri, 01 Dec 2017 11:36:40 +0000</pubDate>
<dc:creator><![CDATA[Admin]]></dc:creator>
<category><![CDATA[cat1]]></category>
<category><![CDATA[cat2]]></category>
<category><![CDATA[cat3]]></category>
<category><![CDATA[cat4]]></category>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[]]></content:encoded>
</item>');
$cat_name1 = $xml->category[0]->__toString();
$cat_name2 = $xml->category[1]->__toString();
$cat_name3 = $xml->category[2]->__toString();
$cat_name4 = $xml->category[3]->__toString();
echo "<pre>";
print_r($cat_name1);
echo "</pre>";
echo "<pre>";
print_r($cat_name2);
echo "</pre>";
echo "<pre>";
print_r($cat_name3);
echo "</pre>";
echo "<pre>";
print_r($cat_name4);
echo "</pre>";
this will output:
you can just:
$xml->category->__toString();
it will assume you want the first category.

PHP XML why I can't read the first attribute with SimpleXML?

The XML file I want to read looks like this:
<issues aaa="444" exportTime="Tue Jul 28 23:54:39 CEST 2015">
<issue>
<name>Testing</name>
I use this code:
$simple = file_get_contents('/url/test3.xml');
$test = new SimpleXMLElement($simple);
I can read the issue name children:
echo $test->issue[1]->name;
How can I read issues ExportTime value?
echo $test->issues[exportTime]
doesn't do anything.
Try
<?php
$str = <<<XML
<issues aaa="444" exportTime="Tue Jul 28 23:54:39 CEST 2015">
<issue>
<name>Testing</name>
</issue>
</issues>
XML;
$xml = new SimpleXMLElement($str);
var_dump($xml['exportTime']);
?>
OUTPUT
object(SimpleXMLElement)[2]
public 0 => string 'Tue Jul 28 23:54:39 CEST 2015' (length=29)

How to parse XML with namespace?

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);
}
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);
?>

How do I use preg_match_all with 2 values and preg_replace to create 2 different links

I have a text file that I am displaying in a table. I am using preg_match_all to find a specific Title with a specific Chapter and I am replacing the Title and Chapter with preg_replace to make it a link..
For example the contents within the text file are as follows:
Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44
And I am replacing the Title's and Chapters... (i.e. Naruto 123) with a link to the webpage where that is located.
I also need to take into effect the folderpath that the webpage is located in.
The folderpath is the title of the anime. So if we were doing it for Naruto 123 the folder path is Naruto/.
So in the end the link will look like this:
http://website/folderpath/animetitle animechapter
The problem that I have is that I can get the folderpath's correct but I cannot create 2 or more distinct links. My code replaces Naruto 123 and Naruto 98 with the same link.
Here is what my code:
<?
$data=file_get_contents('series-updates.txt'); //get data from file
$regexp[0]="/(Naruto)[[:space:]](\w+)/";
$regexp[1]="/Naruto/";
preg_match($regexp[0], $data, $matches); //match Manga Title with Chapter for URL
$url= $matches[0];
preg_match($regexp[1], $data, $matches2); //match Manga Title for folderpath
$folderpath= $matches2[0];
$patterns= '/(Naruto)[[:space:]](\w+)/';
$replacements= ''.$url.'';
$data=preg_replace($patterns,$replacements, $data);
$dat=explode("\n",$data); //split data at new lines
echo '<table cellspacing=0>';
foreach ($dat AS $value) { //loop
echo '<tr><td>'.$value.'</td></tr>';
}
echo '</table>';
?>
here is an the output of the code:
http://xennetworks.com/output3.php
** ALSO, the reason why in the php code I am using preg_match instead of preg_match_all is because if I use preg_match_all for the links I get the output of ARRAY and I wanted you to see the outcome that I would like.
Try this on for size though I'm not sure what you're looking for the link URL:
$s= <<<STR
Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44
STR;
preg_match_all('/\w{3}\s\d{2}\s\d{2}:\d{2}\s(.+)?\s(\d{2,})/', $s, $m);
for ($i=0; $i<count($m[1]); $i++) {
$url= sprintf('http://xennetworks.com/%s %s', $m[1][$i], $m[2][$i]);
echo("$url\n");
}
<?php
$filedata = "Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44";
$lines = explode("\n", $filedata);
echo "<table border=\"1\">";
foreach($lines as $line)
{
echo "<tr>";
preg_match("/^([a-zA-Z]{3}\s\d{2}\s\d{2}:\d{2})\s(.+?)\s(\d+)\s*?$/", $line, $matches);
echo "<td>$matches[1]</td>";
echo "<td>$matches[2] $matches[3]</td>";
echo "</tr>";
}
echo "</table>"
?>

Categories