[nycphp-talk] PHP4 Array/XML sorting question
Jon Baer
jonbaer at jonbaer.com
Tue Apr 11 14:58:46 EDT 2006
If im not mistaken in *theory* this is exactly the type of work that
XQuery was made for ...
Your query would look something similar to:
{
for $ad in doc("ads.xml")//ad
order by $ad/category
return $ad/title
}
Looks beautiful and much cleaner eh? The problem is no library
support whatsoever on the PHP side, all implementations have been
Java based ...
There is a preliminary library here:
http://phpxmlclasses.sourceforge.net/show_doc.php?
class=class_xquery_lite.html
But no sorting support as of yet and Im not sure if those libraries
are even in active development. I also do not beleive Simple XML has
this capability, only simple Xpath.
- Jon
On Apr 11, 2006, at 2:34 PM, Peter Sawczynec wrote:
> I believe, XSL Transformations (XSLT) is a correct method for
> achieving your
> end, i.e. use XSL to format and sort the XML.
> PHP 4.1+ XSLT library will let you do roughly so...
>
> $xsltHnd = xslt_create();
> xslt_set_base($xsltHnd,'');
> $html = xslt_process($xsltHnd, 'my_listings.xml',
> 'my_listings_format.xsl');
> echo $html;
>
>
> Above, the XML param is your XML file. The XSL file contains a
> mixture of
> XHTML, CSS and XSL.
> The XSL allows you to sort and format XML quite effectively.
>
> Your XSL file will contain code like the following snippets:
>
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="html" omit-xml-declaration="yes"/>
>
> <xsl:template match="/ads">
> <xsl:apply-templates select="ad">
> <xsl:sort select="category"/>
> </xsl:apply-templates>
> </xsl:template>
>
>
> <xsl:template match="ad">
> <xsl:choose>
> <xsl:when test="url[.!='']">
> <td align="left" height="28" valign="top">
> <xsl:element name="a">
> <xsl:attribute name="href"><xsl:value-of
> select="@url"/></xsl:attribute>
> <xsl:element name="img">
> <xsl:attribute
> name="src">images/ads/<xsl:text></xsl:text><xsl:value-of
> select="title"/></xsl:attribute>
> <xsl:attribute
> name="border">0</xsl:attribute>
> </xsl:element>
> </xsl:element>
> </td>
> </xsl:when>
> <xsl:otherwise>
> <td align="left" height="28" valign="top">
> <img src="../images/spacer.gif" />
> </td>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
>
> </xsl:stylesheet>
>
>
> Above shows very roughly the technique for using XSL to sort XML
> and then
> push the XML data into some XHTML to create a hyperlinked thumbnail
> image
> for display in the browser.
>
> Now that is just to give you an idea.
>
> This technique, of course, has a learning curve. You need to look
> up PHP
> XML/XSLT tutorials and samples on the web and get familiar with XSL in
> general. Particularly you need to grasp XSL templates and how to
> apply to
> XML data.
>
> Again, this is just one avenue but once you got it, you can apply this
> approach on many tasks with few changes.
>
> Otherwise, look at PHP array sort techniques at:
> http://us2.php.net/manual/en/ref.array.php
>
> Warmest regards,
>
> Peter Sawczynec,
> Technology Director
> PSWebcode
> _Design & Interface
> _Ecommerce
> _Database Management
> ps at pswebcode.com
> 718.796.1951
> www.pswebcode.com
>
>
>
> -----Original Message-----
> From: talk-bounces at lists.nyphp.org [mailto:talk-
> bounces at lists.nyphp.org] On
> Behalf Of Tim Boyden
> Sent: Tuesday, April 11, 2006 1:29 PM
> To: talk at lists.nyphp.org
> Subject: [nycphp-talk] PHP4 Array/XML sorting question
>
>
> Hello,
>
> I am working on a web page that lists some ads stored in an XML
> file and I'm
> having trouble with figuring out how to sort the listings by their
> "category" element. Currently I pull the "ad" elements from the XML
> into an
> array and print out the HTML list of ads in a non-sorted manner.
> I'd like it
> to print out with a header for the category followed by a list of
> ads in
> that category. I'm not sure how to code it though. Any help would be
> appreciated. Below is a snippet from the XML file:
>
> <?xml version="1.0" encoding="iso-8859-1"?>
> <ads>
> <ad>
> <franchise>test</franchise>
> <category>Food</category>
> <title>Test 1</title>
> <url>testpage1.pdf</url>
> </ad>
> <ad>
> <franchise>test</franchise>
> <category>Home Improvement</category>
> <title>Test 2</title>
> <url>testpage2.pdf</url>
> </ad>
> <ad>
> <franchise>test</franchise>
> <category>Services</category>
> <title>Test 3</title>
> <url>testpage3.pdf</url>
> </ad>
> </ads>
>
> Thanks,
>
> Tim Boyden
>
> ---------------------------
> Timothy Boyden
> Network Administrator
> tboyden at supercoups.com
>
> SuperCoupsR | 350 Revolutionary Drive | E. Taunton, MA 02718
> 508-977-2034 | www.supercoups.com
> ---------------------------
> Local Coupons. Super Savings.R
>
> _______________________________________________
> New York PHP Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
> New York PHP Conference and Expo 2006
> http://www.nyphpcon.com
> Show Your Participation in New York PHP
> http://www.nyphp.org/show_participation.php
>
More information about the talk
mailing list