How to use XPath with PHP when XML contains namespaces
I am looking for a way to get the values kuler:swatchHexColor
in the XML file below. I tried several ways but no luck. I've tried it below but not very good.
Again, trying to put values hexColor
into variables.
$feed = simplexml_load_file('url');
$kuler = $feed->children('http://kuler.adobe.com/kuler/API/rss/');
foreach ($kuler->themeItem as $themeItem) {
echo $themeItem->swatch;
}
<rss xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rss="http://blogs.law.harvard.edu/tech/rss" xmlns:kuler="http://kuler.adobe.com/kuler/API/rss/" version="2.0">
<channel>
<title>kuler search results for 'crazy'</title>
<link>http://kuler.adobe.com/</link>
<description>
612 kuler themes were found. Displaying results 1 to 1.
</description>
<language>en-us</language>
<pubDate />
<lastBuildDate />
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Kuler Services</generator>
<managingEditor>kulerfeedback@adobe.com</managingEditor>
<webMaster>kulerfeedback@adobe.com</webMaster>
<recordCount>612</recordCount>
<startIndex>0</startIndex>
<itemsPerPage>1</itemsPerPage>
<item>
<title>Theme Title: crazy lisa</title>
<link>http://kuler.adobe.com/index.cfm#themeID/89760</link>
<guid>http://kuler.adobe.com/index.cfm#themeID/89760</guid>
<enclosure xmlns="http://www.solitude.dk/syndication/enclosures/">
<title>crazy lisa</title>
<link type="image/png" length="1">
<url>
http://kuler-api.adobe.com/kuler/themeImages/theme_89760.png
</url>
</link>
</enclosure>
<description>
<img src="http://kuler-api.adobe.com/kuler/themeImages/theme_89760.png" />
<br /> Artist: sa<br /> ThemeID: 89760<br /> Posted: 09/24/2007<br /> Tags: crazy but sweet, crazy harmony <br /> Hex: FF0082, BF9F1B, B8495D, 520641, CC0000
</description>
<kuler:themeItem>
<kuler:themeID>89760</kuler:themeID>
<kuler:themeTitle>crazy lisa</kuler:themeTitle>
<kuler:themeImage>...</kuler:themeImage>
<kuler:themeAuthor>...</kuler:themeAuthor>
<kuler:themeTags>crazy but sweet, crazy harmony</kuler:themeTags>
<kuler:themeRating>3</kuler:themeRating>
<kuler:themeDownloadCount>28</kuler:themeDownloadCount>
<kuler:themeCreatedAt>20070924</kuler:themeCreatedAt>
<kuler:themeEditedAt>20070926</kuler:themeEditedAt>
<kuler:themeSwatches>
<kuler:swatch>
<kuler:swatchHexColor>FF0082</kuler:swatchHexColor>
<kuler:swatchColorMode>cmyk</kuler:swatchColorMode>
<kuler:swatchChannel1>0.0</kuler:swatchChannel1>
<kuler:swatchChannel2>1.0</kuler:swatchChannel2>
<kuler:swatchChannel3>0.49</kuler:swatchChannel3>
<kuler:swatchChannel4>0.0</kuler:swatchChannel4>
<kuler:swatchIndex>0</kuler:swatchIndex>
</kuler:swatch>
<kuler:swatch>
<kuler:swatchHexColor>BF9F1B</kuler:swatchHexColor>
<kuler:swatchColorMode>cmyk</kuler:swatchColorMode>
<kuler:swatchChannel1>0.0</kuler:swatchChannel1>
<kuler:swatchChannel2>0.17</kuler:swatchChannel2>
<kuler:swatchChannel3>0.86</kuler:swatchChannel3>
<kuler:swatchChannel4>0.25</kuler:swatchChannel4>
<kuler:swatchIndex>1</kuler:swatchIndex>
</kuler:swatch>
<kuler:swatch>
<kuler:swatchHexColor>B8495D</kuler:swatchHexColor>
<kuler:swatchColorMode>cmyk</kuler:swatchColorMode>
<kuler:swatchChannel1>0.01</kuler:swatchChannel1>
<kuler:swatchChannel2>0.61</kuler:swatchChannel2>
<kuler:swatchChannel3>0.5</kuler:swatchChannel3>
<kuler:swatchChannel4>0.27</kuler:swatchChannel4>
<kuler:swatchIndex>2</kuler:swatchIndex>
</kuler:swatch>
<kuler:swatch>
<kuler:swatchHexColor>520641</kuler:swatchHexColor>
<kuler:swatchColorMode>cmyk</kuler:swatchColorMode>
<kuler:swatchChannel1>0.0</kuler:swatchChannel1>
<kuler:swatchChannel2>0.926829</kuler:swatchChannel2>
<kuler:swatchChannel3>0.207317</kuler:swatchChannel3>
<kuler:swatchChannel4>0.678431</kuler:swatchChannel4>
<kuler:swatchIndex>3</kuler:swatchIndex>
</kuler:swatch>
<kuler:swatch>
<kuler:swatchHexColor>CC0000</kuler:swatchHexColor>
<kuler:swatchColorMode>cmyk</kuler:swatchColorMode>
<kuler:swatchChannel1>0.0</kuler:swatchChannel1>
<kuler:swatchChannel2>1.0</kuler:swatchChannel2>
<kuler:swatchChannel3>1.0</kuler:swatchChannel3>
<kuler:swatchChannel4>0.2</kuler:swatchChannel4>
<kuler:swatchIndex>4</kuler:swatchIndex>
</kuler:swatch>
</kuler:themeSwatches>
</kuler:themeItem>
<pubDate>Mon, 24 Sep 2007 15:24:23 PST</pubDate>
</item>
</channel>
</rss>
+3
source to share
1 answer
There are two general ways to do this in PHP. First, using a simple xml extension (as you already do):
$feed = simple_xml_load_file('url');
// resister the kuler namespace
$feed->registerXpathNamespace('kuler', 'http://kuler.adobe.com/kuler/API/rss/');
// get elements regardless of their position in tree -> //
$result = $feed->xpath('//kuler:swatchHexColor');
// iterate through the result set
foreach ($result as $item) {
echo $item, PHP_EOL;
}
You can also use DOM extension:
$feed = new DOMDocument();
$feed->load('url');
// create an xpath selector for the document
$selector = new DOMXPath($feed);
// register the kuler namespace
$selector->registerNamespace('kuler', 'http://kuler.adobe.com/kuler/API/rss/');
// get elements regardless of postion in tree -> //
$result = $selector->query('//kuler:swatchHexColor');
// iterate trough the result set
foreach ($result as $node) {
// do what you want with the node ...
echo $node->nodeValue, PHP_EOL;
}
+1
source to share