Search Postgresql Archives

xpath_list() question for contrib/xml2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Short summary:

  I want something like xpath_list() that returns an array
  (instead of a delimited, concatenated string) when multiple
  nodes exist in an XML file.  It feels to me like that'd
  be a better (cleaner) API.

  Before I write one, does anyone already have such a
  patch?  If not, would people be interested if I added
  xpath_array() that behaves like xpath_list() but returns
  an array instead of one big string?

  Or... is xpsql on gborg or some other postgresql-xml
  project a better place for me to be looking?


Longer:

From the (very cool) xml2 package's README, I see
  xpath_list(document,query,separator) RETURNS text
   This function returns multiple values separated by the specified
   separator, e.g. Value 1,Value 2,Value 3 if separator=','.

  xpath_list(document,query) RETURNS text
   This is a wrapper for the above function that
   uses ',' as the separator.

And indeed, that's exactly what it returns:

fl=# create temporary table x (xml text);

  flee=# insert into x values
         ('<a><b id="1">1</b><b id="2">2</b></a>');
  flee=# select xpath_list(xml,'/a/b') from x;
   xpath_list
  ------------
   1,2
  (1 row)

However to make use of each value, I'd then need to re-parse
that text string to make use of each of the values.

I realize I can get the effect I want using an uncommon
string as a delimiter and the string_to_array() function...
 fl=# select
    string_to_array(xpath_list(xml,'/a/b','##delim##')
                                         ,'##delim##') from x;
    string_to_array
    -----------------
    {1,2}
    (1 row)
... but that feels pretty ugly considering to guess what
delimiter won't be in the string.



While I'm at it, a version of xpath_nodeset:
  fl=# select xpath_nodeset(xml,'/a/b') from x;
         xpath_nodeset
  --------------------------------
   <b id="1">1</b><b id="2">2</b>
  (1 row)
that returned an array of matching XML fragments
instead of all the fragments concatenated together
might also be useful.


Thoughts? Suggestions?

  Ron


---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux