Thread: More clearly on XML namespaces inside xpath function
Explain how to deal with XML namespaces inside the "xpath" function (especially about "default" namespaces, what is really unclear at first glance).
Index: func.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.516
diff -u -r1.516 func.sgml
--- func.sgml 3 Jun 2010 14:40:42 -0000 1.516
+++ func.sgml 4 Jun 2010 09:48:44 -0000
@@ -8596,8 +8596,11 @@
mappings. This array should be a two-dimensional array with the
length of the second axis being equal to 2 (i.e., it should be an
array of arrays, each of which consists of exactly 2 elements).
- The first element of each array entry is the namespace name, the
- second the namespace URI.
+ The first element of each array entry is the namespace name (alias), the
+ second the namespace URI. It is not required that aliases provided in
+ this array are the same that those being used in the XML document itself (in
+ other words, both in the XML document and in the <function>xpath</function>
+ function context, aliases are <emphasis>local</>).
</para>
<para>
@@ -8612,6 +8615,19 @@
(1 row)
]]></screen>
</para>
+
+ <para>
+ How to deal with default (anonymous) namespaces:
+<screen><![CDATA[
+SELECT xpath('//mydefns:b/text()', '<a xmlns="http://example.com"><b>test</b></a>',
+ ARRAY[ARRAY['mydefns', 'http://example.com']]);
+
+ xpath
+--------
+ {test}
+(1 row)
+]]></screen>
+ </para>
</sect2>
<sect2 id="functions-xml-mapping">
Thanks, applied. --------------------------------------------------------------------------- Nikolay Samokhvalov wrote: > Explain how to deal with XML namespaces inside the "xpath" function > (especially about "default" namespaces, what is really unclear at first > glance). > > > Index: func.sgml > =================================================================== > RCS file: /projects/cvsroot/pgsql/doc/src/sgml/func.sgml,v > retrieving revision 1.516 > diff -u -r1.516 func.sgml > --- func.sgml 3 Jun 2010 14:40:42 -0000 1.516 > +++ func.sgml 4 Jun 2010 09:48:44 -0000 > @@ -8596,8 +8596,11 @@ > mappings. This array should be a two-dimensional array with the > length of the second axis being equal to 2 (i.e., it should be an > array of arrays, each of which consists of exactly 2 elements). > - The first element of each array entry is the namespace name, the > - second the namespace URI. > + The first element of each array entry is the namespace name (alias), > the > + second the namespace URI. It is not required that aliases provided in > + this array are the same that those being used in the XML document > itself (in > + other words, both in the XML document and in the > <function>xpath</function> > + function context, aliases are <emphasis>local</>). > </para> > > <para> > @@ -8612,6 +8615,19 @@ > (1 row) > ]]></screen> > </para> > + > + <para> > + How to deal with default (anonymous) namespaces: > +<screen><![CDATA[ > +SELECT xpath('//mydefns:b/text()', '<a xmlns="http://example.com > "><b>test</b></a>', > + ARRAY[ARRAY['mydefns', 'http://example.com']]); > + > + xpath > +-------- > + {test} > +(1 row) > +]]></screen> > + </para> > </sect2> > > <sect2 id="functions-xml-mapping"> -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + None of us is going to be here forever. +