Re: xpath improvement suggestion

From: Arie Bikker <arie(at)abikker(dot)nl>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: xpath improvement suggestion
Date: 2010-01-11 23:06:55
Message-ID: 4B4BAF0F.4040705@abikker.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Peter Eisentraut wrote:
> On ons, 2010-01-06 at 23:46 +0100, Arie Bikker wrote:
>
>> Hope this is the right attachement type (I'm new at this)
>> BTW. here a some nice examples:
>>
>> - Get the number of attributes of the first childnode:
>>
>> select ( xpath('count(@*)',(xpath('*[1]','<a b="c"><d e="f"
>> g="j"/></a>'))[1]))[1];
>>
>> - an alternative for xpath_exist('/a/d')
>> select (xpath('boolean(/a/d)','<a b="c"><d e="f" g="j"/></a>'))[1];
>>
>> - fixes bug 4206
>>
>> select xpath('//text()',xmlparse(document '<?xml
>> version="1.0"?><elem1><elem2>one</elem2><elem2>two</elem2><elem2>three</elem2><elem3att="2"/></elem1>'));
>>
>> - fixes bug 4294
>>
>> select xpath('name(/my:a/*[last()])', '<a
>> xmlns="http://myns.com/ns"><b>text1</b><c>text2</c></a>',
>> ARRAY[ARRAY['my','http://myns.com/ns']]);
>>
>
> Instead of converting everything to text, there have been previous
> suggestions to add functionx like xpath_string, xpath_number,
> xpath_boolean that return the appropriate types from xpath. This could
> provide for better type safety and probably also more clarity.
>
> In any case, please consider adding test cases like the above to the
> regression tests in whatever patch comes out at the end.
>
>
As an addition these xpath_sometype functions have been mentioned and
can be handy. But, considering that the xpath function itself is a
generalized function, the user of this function might not have
beforehand knowledge of the type of the result; the first argument of
the call could be used in a dynamic fashion.
Comming back to the xpath_sometype functions - would these definitions
be suitable?

boolean xpath_boolean(xpath, xml [, nsarray])
text xpath_string(xpath, xml [, nsarray])
int xpath_number(xpath, xml [,nsarray])

implementation can be done via an xpath_nonnode function defined as:
text xpath_nonnode(xpath, xml [,nsarray])
where each of the xpath_sometype functions simply interpret the text as
its target type.
Is this the way to go?

kind regards, Arie Bikker

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Chernow 2010-01-12 00:27:58 Re: Typed tables
Previous Message Robert Haas 2010-01-11 22:39:02 Re: dbt2-shell script problem