Return Unique Values from an XML Files using PHP, simplexml_load_file and Xpath -


this question has answer here:

thank assistance in advance. have search through forum , through www looking answer cannot find straight forward one.

i trying return results xml file extracts unique value of attribute.

xml example file:

<?xml version="1.0" encoding="iso-8859-1" ?> <computers>     <restults>    <computer id="1" group_id="a" model_group="acer" name="acer 1 gb" />    <computer id="2" group_id="a" model_group="acer" name="acer 2 gb" />    <computer id="3" group_id="b" model_group="acer" name="acer 3 gb" />    <computer id="4" group_id="c" model_group="acer" name="acer 4 gb"/>    <computer id="5" group_id="c" model_group="acer" name="acer 6 gb" />    <computer id="6" group_id="d" model_group="acer" name="acer 8 gb" />    <computer id="7" group_id="d" model_group="acer" name="acer 16 gb" />    <computer id="8" group_id="d" model_group="acer" name="acer 32 gb" />    <computer id="9" group_id="e" model_group="acer" name="acer 48 gb" />     </restults> </computers> 

what want php script run through xml file , present me unique "group_id" values. ie: a,b,c,d,e

nothing more.

i've looked @ various solutions, provided on website , others, haven't worked.

i did read xpath functions , distinct-values function cannot find way identify version of xpath running? know function available in xpath 2.0

using xpath 1.0 solution know of check previous nodes same value , if found exclude node.

<?php $e = new simplexmlelement(data()); foreach( $e->xpath('/computers/restults/computer[not(@group_id=preceding-sibling::computer/@group_id)]/@group_id') $n ) {     echo $n, "\n"; }  function data() {     return <<< eox <computers>     <restults>         <computer id="1" group_id="a" model_group="acer" name="acer 1 gb" />         <computer id="2" group_id="a" model_group="acer" name="acer 2 gb" />         <computer id="3" group_id="b" model_group="acer" name="acer 3 gb" />         <computer id="4" group_id="c" model_group="acer" name="acer 4 gb"/>         <computer id="5" group_id="c" model_group="acer" name="acer 6 gb" />         <computer id="6" group_id="d" model_group="acer" name="acer 8 gb" />         <computer id="7" group_id="d" model_group="acer" name="acer 16 gb" />         <computer id="8" group_id="d" model_group="acer" name="acer 32 gb" />         <computer id="9" group_id="e" model_group="acer" name="acer 48 gb" />     </restults> </computers> eox; } 

when using xslt < 2.0 there method called muenchian grouping helpful here.

i haven't tested both approaches against large data sets. might rather time/memory consuming....


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -