Обсуждение: help with xpath namespace
I am trying to use xpath to extract some information from a XML document.
(if it matters, It's the router config for a Juniper router)
I believe I am having problems with the namespace.
I am trying to extract the serial-number, but I am not getting anything.
Here is the script I have been testing with:
BEGIN;
CREATE TABLE "xml_test" ( data_xml xml
);
INSERT INTO xml_test (data_xml) VALUES ('<chassis-inventory xmlns="http://xml.juniper.net/junos/9.6R4/junos-chassis">
<chassisjunos:style="inventory"> <name>Chassis</name> <serial-number>JN1111111111</serial-number>
<description>MX960</description> </chassis></chassis-inventory>');
select data_xml from xml_test where data_xml is document;
select (xpath('/chassis-inventory/chassis/serial-number/text()', data_xml, ARRAY[ARRAY['junos',
'http://xml.juniper.net/junos/9.6R4/junos-chassis']] )) from xml_test;
ROLLBACK;
This gives me the following:
BEGIN
CREATE TABLE
INSERT 0 1 data_xml
------------------------------------------------------------------------------- <chassis-inventory
xmlns="http://xml.juniper.net/junos/9.6R4/junos-chassis">+ <chassis junos:style="inventory">
+ <name>Chassis</name> +
<serial-number>JN1111111111</serial-number> + <description>MX960</description>
+ </chassis> +
</chassis-inventory>
(1 row)
xpath
-------{}
(1 row)
ROLLBACK
Can anyone suggest how I would go about getting the serial-number with xpath?
Thanks
2011/9/22 Brian Sherwood <bdsher@gmail.com>
http://www.postgresql.org/docs/9.1/static/functions-xml.html#FUNCTIONS-XML-PROCESSING - see "mydefns".
This will work:
select xpath(
'/junos:chassis-inventory/junos:chassis/junos:serial-number/text()',
data_xml,
ARRAY[ARRAY['junos', 'http://xml.juniper.net/junos/9.6R4/junos-chassis']]
)
from xml_test;
cheers, Filip
select (xpath('/chassis-inventory/chassis/serial-number/text()',
data_xml,
ARRAY[ARRAY['junos',
'http://xml.juniper.net/junos/9.6R4/junos-chassis']]
)) from xml_test;
Can anyone suggest how I would go about getting the serial-number with xpath?
http://www.postgresql.org/docs/9.1/static/functions-xml.html#FUNCTIONS-XML-PROCESSING - see "mydefns".
This will work:
select xpath(
'/junos:chassis-inventory/junos:chassis/junos:serial-number/text()',
data_xml,
ARRAY[ARRAY['junos', 'http://xml.juniper.net/junos/9.6R4/junos-chassis']]
)
from xml_test;
cheers, Filip
Yep, that did it.
Thanks!
2011/9/23 Filip Rembiałkowski <plk.zuber@gmail.com>:
>
>
> 2011/9/22 Brian Sherwood <bdsher@gmail.com>
>>
>> select (xpath('/chassis-inventory/chassis/serial-number/text()',
>> data_xml,
>> ARRAY[ARRAY['junos',
>> 'http://xml.juniper.net/junos/9.6R4/junos-chassis']]
>> )) from xml_test;
>>
>> Can anyone suggest how I would go about getting the serial-number with
>> xpath?
>>
>
>
> http://www.postgresql.org/docs/9.1/static/functions-xml.html#FUNCTIONS-XML-PROCESSING
> - see "mydefns".
>
> This will work:
>
> select xpath(
> '/junos:chassis-inventory/junos:chassis/junos:serial-number/text()',
> data_xml,
> ARRAY[ARRAY['junos',
> 'http://xml.juniper.net/junos/9.6R4/junos-chassis']]
> )
> from xml_test;
>
>
>
> cheers, Filip
>
>
>
On Mon, Sep 26, 2011 at 09:56:06AM -0400, Brian Sherwood wrote: > Yep, that did it. > > Thanks! ProTip (for the list archive): since the namespace alias in the query and the original XML don't need to match (in this common case, the document uses a default namespace, which isn't available in xpaths), you can save significant typing by using a single-character namespace: select xpath( '/j:chassis-inventory/j:chassis/j:serial-number/text()', data_xml, ARRAY[ARRAY['j', 'http://xml.juniper.net/junos/9.6R4/junos-chassis']] ) from xml_test; Ross > > > 2011/9/23 Filip Rembiałkowski <plk.zuber@gmail.com>: > > > > > > 2011/9/22 Brian Sherwood <bdsher@gmail.com> > >> > >> select (xpath('/chassis-inventory/chassis/serial-number/text()', > >> data_xml, > >> ARRAY[ARRAY['junos', > >> 'http://xml.juniper.net/junos/9.6R4/junos-chassis']] > >> )) from xml_test; > >> > >> Can anyone suggest how I would go about getting the serial-number with > >> xpath? > >> > > > > > > http://www.postgresql.org/docs/9.1/static/functions-xml.html#FUNCTIONS-XML-PROCESSING > > - see "mydefns". > > > > This will work: > > > > select xpath( > > '/junos:chassis-inventory/junos:chassis/junos:serial-number/text()', > > data_xml, > > ARRAY[ARRAY['junos', > > 'http://xml.juniper.net/junos/9.6R4/junos-chassis']] > > ) > > from xml_test; > > > > > > > > cheers, Filip > > > > > > > > -- > Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-sql >