Re: xpath

From: Allan Kamau <kamauallan(at)gmail(dot)com>
To: Otandeka Simon Peter <sotandeka(at)gmail(dot)com>
Cc: Postgres General Postgres General <pgsql-general(at)postgresql(dot)org>
Subject: Re: xpath
Date: 2010-02-10 09:33:18
Message-ID: ab1ea6541002100133x2dc8b80dh5d7adf772f0aee7f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, Feb 10, 2010 at 11:34 AM, Otandeka Simon Peter
<sotandeka(at)gmail(dot)com> wrote:
> Allan,
>
> Postgres is very strict on variable types and char conversion.  I have a
> feeling you are trying to access data from a varchar feild using an
> integer...
>
> Can you paste here your schema for that table?
>
> P.
>
> On Wed, Feb 10, 2010 at 11:06 AM, Allan Kamau <kamauallan(at)gmail(dot)com> wrote:
>>
>> Hi,
>> I am running postgreSQL-8.4.2. I have a table that stores a single xml
>> document per row in one of it's fields. I would like to use xpath to
>> retrieve portions of these xml documents.
>> Is there a way to do so. (I am running postgreSQL 8.4.2 configured
>> (built) with --with-libxml and --with-libxslt options)
>>
>> I have looked at 'xpath' but I am unable to get it work for table fields.
>>
>> The command below works.
>> SELECT xpath('/doc/name/@first','<doc><name first="David"
>> last="Marston"/>...</doc>');
>>
>> The command below seems not to execute successfully
>> SELECT a.id,xpath('/doc/name/@first',a.xml_payload) FROM
>> staging.simple_table a WHERE a.id=1;
>>
>> HINT:  No function matches the given name and argument types. You
>> might need to add explicit type casts.
>>
>>
>> Allan.
>>
>> --
>> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-general
>
>

As advised by Peter,
Below is an example (including the ddl and dml statements), it drops
and creates a table called "simple_table" and a sequence called
"simple_table_seq" both in the "public" schema. Please ensure this
objects if prexisting are not of importance to you.

DROP SEQUENCE IF EXISTS simple_table_seq CASCADE;
CREATE SEQUENCE simple_table_seq;
DROP TABLE IF EXISTS simple_table CASCADE;
CREATE TABLE simple_table
(id INTEGER NOT NULL DEFAULT NEXTVAL('simple_table_seq')
,xml_payload TEXT
,PRIMARY KEY(id)
)
;
INSERT INTO simple_table
(
id
,xml_payload
)
SELECT
nextval('simple_table_seq')AS id
,'<doc><name first="David" last="Marston"/>some text</doc>' AS xml_payload
;
SELECT a.id,a.xml_payload FROM simple_table a LIMIT 1;
SELECT xpath('/doc/name/@first',SELECT a.xml_payload FROM simple_table
a LIMIT 1);
SELECT a.id,xpath('/doc/name/@first',a.xml_payload) FROM simple_table a LIMIT 1;

SELECT xpath('/doc/name/@first','<doc><name first="David"
last="Marston"/>some text</doc>');

DROP SEQUENCE IF EXISTS simple_table_seq CASCADE;
DROP TABLE IF EXISTS simple_table CASCADE;

Allan.

In response to

  • Re: xpath at 2010-02-10 08:34:01 from Otandeka Simon Peter

Browse pgsql-general by date

  From Date Subject
Next Message Allan Kamau 2010-02-10 09:39:43 Re: xpath
Previous Message John R Pierce 2010-02-10 08:47:25 Re: One column to multiple columns based on constraints?