Linked in xml response to php variables [duplicate] - php

This question already has answers here:
How do you parse and process HTML/XML in PHP?
(31 answers)
Closed 9 years ago.
i am getting this result from my linked in connect script,
<person>
<email-address>xzenia1#gmail.com</email-address>
<picture-url>http://m3.licdn.com/mpr/mprx/0_UiHHf6SiF4yuBerHUkfUfkshFpomUIrHMbpBf5Iy4sOYk7FecL4XTLxtdAEl42AXsho9hGzDtRBl</picture-url>
</person>
this is the php call
$xml_response = $linkedin->getProfile("~:(email-address,picture-url)");
how to make them assign to separate PHP variable.

You can load your xml as string with simplexml_load_string and then loop in it to get all data
$xml = simplexml_load_string($xml_response);
foreach($xml as $key => $val)
{
echo "$key=>$val<br>" . "\n";
}
This will output
email-address=>xzenia1#gmail.com
picture-url=>http://m3.licdn.com/mpr/mprx/0_UiHHf6SiF4yuBerHUkfUfkshFpomUIrHMbpBf5Iy4sOYk7FecL4XTLxtdAEl42AXsho9hGzDtRBl
Live sample

Try,
$xml = (array)simplexml_load_string($xml_response);
echo $email=$xml['email-address'];
echo $picture=$xml['picture-url'];

$xml = simplexml_load_string($linkedin->getProfile("~:(email-address,picture-url)"));
echo $xml->{'email-address'}[0] . "<br />";
echo $xml->{'picture-url'}[0];
simplexmldoesn't like - in node names, therefore use $xml->{'email-address'} instead of $xml->email-address.
use index [0] on both nodes, just in case, if one day your simplexml object would contain more than one <person> node...
see it working: http://codepad.viper-7.com/dQQ6sa

Related

How do I parse a specific child of xml output using simplexml? [duplicate]

This question already has answers here:
SimpleXML: Selecting Elements Which Have A Certain Attribute Value
(2 answers)
Closed 5 years ago.
I wish to parse this XML output, but only fetch the value for the "doi" record (e.g. 10.1038/onc.2012.390)
<ArticleIdList>
<ArticleId IdType="pubmed">22986524</ArticleId>
<ArticleId IdType="pii">onc2012390</ArticleId>
<ArticleId IdType="doi">10.1038/onc.2012.390</ArticleId>
</ArticleIdList>
Can some advise me how to accomplish this?
I've used
$xml = simplexml_load_file($query) or die("Error, feed not loading");
to create the object, but could not figure out the right syntax to move fw..
Thanks!
With SimpleXMLElement::xpath ( string $path ) function:
$xml = simplexml_load_file($query) or die("Error, feed not loading");
$article_doi = (string) $xml->xpath('//ArticleId[#IdType="doi"]')[0];
print_r($article_doi);
The output:
10.1038/onc.2012.390
http://php.net/manual/en/simplexmlelement.xpath.php

can't access values on parsing xml php [duplicate]

This question already has answers here:
How do you parse and process HTML/XML in PHP?
(31 answers)
Closed 7 years ago.
I am trying to parse the xml response returned by url. I can successfully view the response but when I try to get the specific value from the xml, then I get nothing. Here is my PHP code.
$responseMessage = file_get_contents($myurl);
$xml = simplexml_load_string($responseMessage, 'SimpleXMLElement', LIBXML_NOCDATA);
print_r($xml)
Here's the actual xml response
<PPResponse Result="000" Key="99fd1c21-b07d-41f5-bbf8-1917f53c3152">
<ResultMessage>
Operation is succesfully completed
</ResultMessage>
<UtilityInfo>
<UtilityCode>78</UtilityCode>
</UtilityInfo>
<BillInfo>
<Bill>
<BillNumber>99fd1c21-b07d-41f5-bbf8-1917f53c3152</BillNumber>
<DueDate>2015-08-06T11:23:49</DueDate>
<Amount>0</Amount>
<ReserveInfo>Some info</ReserveInfo>
<BillParam>
<mask>3</mask>
<commission type="0" val="0.00" op="-" paysource="1" />
</BillParam>
<RefStan>7676422901773</RefStan>
</Bill>
</BillInfo>
</PPResponse>
Now I want to save only BillNumber value and RefStan Value into some variable so that I can use it later.
How can I do So?
You want to get attribute val from commission property? Try something like this:
$value = (string)$xml->BillInfo->Bill->BillParam->commission->attributes()->val;
Try
$str = <<<XML
<PPResponse Result="000" Key="99fd1c21-b07d-41f5-bbf8-1917f53c3152">
<ResultMessage>
Operation is succesfully completed
</ResultMessage>
<UtilityInfo>
<UtilityCode>78</UtilityCode>
</UtilityInfo>
<BillInfo>
<Bill>
<BillNumber>99fd1c21-b07d-41f5-bbf8-1917f53c3152</BillNumber>
<DueDate>2015-08-06T11:23:49</DueDate>
<Amount>0</Amount>
<ReserveInfo>Some info</ReserveInfo>
<BillParam>
<mask>3</mask>
<commission type="0" val="0.00" op="-" paysource="1" />
</BillParam>
<RefStan>7676422901773</RefStan>
</Bill>
</BillInfo>
</PPResponse>
XML;
$xml = new SimpleXMLElement($str);
echo $xml->ResultMessage;
echo $xml->BillInfo->Bill->ReserveInfo;
Note Please replace $str with $responseMessage.

parsing xml file in php [duplicate]

This question already has answers here:
How do you parse and process HTML/XML in PHP?
(31 answers)
Closed 9 years ago.
I have an xml file which consist of name of the country and its code.
<country>
<name>ALBANIA</name>
<code>AL</code>
</country>
<country>
<name>ALGERIA</name>
<code>DZ</code>
</country>
<country>
<name>AMERICAN SAMOA</name>
<code>AS</code>
</country>
now I am using following php code to store them in array and printing them(country.xml file is in the same folder as this php code.
$countries = array();
$file = new SimpleXMLElement(__DIR__ . '/country.xml', null, true);
foreach ($file->country as $country) {
$name = trim($country['name']);
$code = trim(strtoupper($country['code']));
$countries[$code] = $name;
echo $code;
}
but this php code shows blank page. Can anyone guide me where I am making mistake and help me to correct it or give some better method to parse xml file.
The simplexml_load_file() in PHP will do the job.
<?php
$xml = simplexml_load_file('country.xml');
$i=0;
$countryName=array();
$countryCode=array();
foreach($xml as $k=>$v)
{
$countryName[$i] = (string) $xml->country[$i]->name;
$countryCode[$i] = (string) $xml->country[$i]->code;
$i++;
}
print_r($countryName);
print_r($countryCode);
?>

simpleXML creating a foreach [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
foreach and simplexml
I have got my XML document loading correct but I am unsure how I can create a simple foreach were I can have [PictureHref] [Title] and [PriceDisplay] loaded for each item given in the feed.
I cannot find a clear example in the documentation.
XML Example
Currently my PHP code consists of the following:
$mainUrl = 'http://api.trademe.co.nz/v1/Member/{id}/Listings/All.xml';
$xmlFeed = simplexml_load_file($mainUrl);
XML
<Listings xmlns="http://api.trademe.co.nz/v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TotalCount>1</TotalCount>
<Page>1</Page>
<PageSize>1</PageSize>
<List>
<Listing>
<ListingId>527496168</ListingId>
<Title>Clifftop Resort style Living with stunning aspect</Title>
<Category>0350-5748-3399-</Category>
<StartPrice>0</StartPrice>
<StartDate>2012-10-26T21:24:47.073Z</StartDate>
<EndDate>2012-12-21T21:24:47.073Z</EndDate>
<ListingLength i:nil="true" />
<HasGallery>true</HasGallery>
<AsAt>2012-10-28T22:48:47.409946Z</AsAt>
<CategoryPath>/Trade-me-property/Residential/For-sale</CategoryPath>
<PictureHref>http://images.trademe.co.nz/photoserver/thumb/10/239043710.jpg</PictureHref>
<RegionId>2</RegionId>
<Region>Auckland</Region>
<Suburb>North Shore</Suburb>
<NoteDate>1970-01-01T00:00:00Z</NoteDate>
<ReserveState>NotApplicable</ReserveState>
<IsClassified>true</IsClassified>
<GeographicLocation>
<Latitude>-36.5681333</Latitude>
<Longitude>174.6936265</Longitude>
<Northing>5951700</Northing>
<Easting>1751547</Easting>
<Accuracy>Address</Accuracy>
</GeographicLocation>
<PriceDisplay>To be auctioned</PriceDisplay>
</Listing>
</List>
</Listings>
All you need is
$url = simplexml_load_file("__YOUR__URL___");
$listing = $url->List->Listing;
echo "<pre>";
echo $listing->PictureHref, PHP_EOL;
echo $listing->Title, PHP_EOL;
echo $listing->PriceDisplay, PHP_EOL;
While I'd recommend the use of DOMDocument instead of SimpleXML, here's how you'd do that in SimpleXML:
$data = array();
foreach($xmlFeed->List as $item) {
$data[] = array(
(string) $item->Listing->PictureHref,
(string) $item->Listing->Title,
(string) $item->Listing->PriceDisplay
);
}
You can see it (sorta, I had to change some things) at CodePad

simpleXML get node child based on attribute [duplicate]

This question already has answers here:
SimpleXML: Selecting Elements Which Have A Certain Attribute Value
(2 answers)
Implementing condition in XPath [duplicate]
(2 answers)
Closed 9 years ago.
I am trying to parse out the value of a node I am referencing by one of its attributes. but I am not sure of the syntax
XML:
<data>
<poster name="E-Verify" id="everify">
<full_image url="e-verify-swa-poster.jpg"/>
<full_other url=""/>
</poster>
<poster name="Minimum Wage" id="minwage">
<full_image url="minwage.jpg"/>
<full_other url="spa_minwage.jpg"/>
</poster>
</data>
here is where I want to get the url value of full_image where poster id equal to minwage:
$xml = simplexml_load_file('PosterData.xml');
$main_url = $xml->full_image[name] where poster[id] = "minwage";
//something like that.
echo $main_url;
Result: minwage.jpg
If anyone has any resources that cover this stuff please share.
You should be able to use SimpleXMLElement::xpath() to run an xpath query on a simple XML document.
$xml = simplexml_load_file('PosterData.xml');
$main_url = $xml->xpath('name[#id="minwage"]/full_image')[0];
echo $main_url;
Simply loop the poster elements and remember to cast the attribute values to strings, since you want to compare them (and probably output them) as strings:
$xml = simplexml_load_file('PosterData.xml');
foreach ($xml->poster as $poster) {
if ((string) $poster['id'] == 'minwage') {
echo (string) $poster->full_image['url'];
}
}
You can use:
$object = simplexml_load_string('<data><poster name="E-Verify" id="everify"><full_image url="e-verify-swa-poster.jpg"/><full_other url=""/></poster><poster name="Minimum Wage" id="minwage"><full_image url="minwage.jpg"/><full_other url="spa_minwage.jpg"/></poster></data>');
foreach ($object as $value) {
echo "URL: ".$value->full_image->attributes();
echo "<br>";
}
Either use simplexml_load_file('Some external file.xml') if calling external file.

Categories