| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | "Enrico Sirola" <enrico(dot)sirola(at)gmail(dot)com> |
| Cc: | pgsql-bugs(at)postgresql(dot)org, Peter Eisentraut <peter_e(at)gmx(dot)net> |
| Subject: | Re: BUG #4294: XML support: name() xpath function not working |
| Date: | 2008-07-11 04:28:14 |
| Message-ID: | 24419.1215750494@sss.pgh.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
"Enrico Sirola" <enrico(dot)sirola(at)gmail(dot)com> writes:
> -- bad
> select xpath('name(/my:a/*[last()])', test, ARRAY[ARRAY['my',
> 'http://myns.com/ns']]) from test;
You could barely swat a fly with what I know about XPath ... but I'm
thinking that the culprit here is the crock at lines 3254-3288 of
xml.c, which explains itself thus:
/*
* To handle both documents and fragments, regardless of the fact whether
* the XML datum has a single root (XML well-formedness), we wrap the XML
* datum in a dummy element (<x>...</x>) and extend the XPath expression
* accordingly. To do it, throw away the XML prolog, if any.
*/
This code prefixes the given path expression with "/x", which of course
is going to break any expression that starts with a function name. It
would have to stick the /x inside the function argument to have any
chance of working. In general, I think this has zero chance of working
without implementing a pretty complete XPath parser. We need to find
another way.
regards, tom lane
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Fred Perniss | 2008-07-11 07:34:16 | BUG #4295: DELETE WHERE Condition |
| Previous Message | Simon Riggs | 2008-07-10 16:57:36 | Re: BUG #4294: XML support: name() xpath function not working |