I have an XML document, and I'm trying to get some information through some queries using XMLTABLE SAP HANA function.
This is an document sample:
<?xml version="1.0" encoding="UTF-8"?> <cfdi:Comprobante xmlns:cfdi="http://www.blablabla.gob/cfd/3"> <cfdi:Emisor Rfc="WXYZ112233444" Nombre="Juan Perez" RegimenFiscal="000"/> <cfdi:Receptor Rfc="ABCD009988223" Nombre="Jose Martinez" UsoCFDI="ABC"/> <cfdi:Conceptos> <cfdi:Concepto ClaveProdServ="01010101" Cantidad="1.00000" ClaveUnidad="C62" Unidad="PIEZAS" Descripcion="REPLACEABLE ELEMENT" ValorUnitario="74.03000" Importe="74.03"> <cfdi:Impuestos> <cfdi:Traslados> <cfdi:Traslado Base="74.03" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="11.84"/> </cfdi:Traslados> </cfdi:Impuestos> </cfdi:Concepto> <cfdi:Concepto ClaveProdServ="01010101" Cantidad="7.00000" ClaveUnidad="C62" Unidad="PIEZAS" Descripcion="ACEITE MOTOR" ValorUnitario="69.29000" Importe="485.03"> <cfdi:Impuestos> <cfdi:Traslados> <cfdi:Traslado Base="485.03" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="77.60"/> </cfdi:Traslados> </cfdi:Impuestos> </cfdi:Concepto> <cfdi:Concepto ClaveProdServ="78181500" Cantidad="0.50000" ClaveUnidad="E48" Unidad="HORAS" Descripcion="SERVICIO DE 130 MIL KM. (D/C) RR " ValorUnitario="949.12000" Importe="474.56"> <cfdi:Impuestos> <cfdi:Traslados> <cfdi:Traslado Base="474.56" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="75.93"/> </cfdi:Traslados> </cfdi:Impuestos> </cfdi:Concepto> </cfdi:Conceptos> </cfdi:Comprobante>
So, when I try some queries like this, I have no problem:
SELECT * FROM XMLTABLE( XMLNAMESPACE('http://www.blablabla.gob/cfd/3' AS 'cfdi'), '/cfdi:Comprobante' PASSING XMLDOCS.DOC --table containing XML document COLUMNS EMISOR NVARCHAR(200) PATH '/cfdi:Emisor/@Nombre', RFCEMISOR NVARCHAR(200) PATH '/cfdi:Emisor/@Rfc', RECEPTOR NVARCHAR(200) PATH '/cfdi:Receptor/@Nombre', RFCRECEPTO NVARCHAR(200) PATH '/cfdi:Receptor/@Rfc' CONCEPTO NVARCHAR(200) PATH '/cfdi:Conceptos/cfdi:Concepto/@Descripcion', CONCEPTO2 NVARCHAR(200) PATH '/cfdi:Conceptos/cfdi:Concepto[2]/@Descripcion' ) AS XTABLE;
But, I would like to break down on details of "Concepto" tag. If I use this XPath notation
/cfdi:Conceptos/cfdi:Concepto/@Descripcion
I just get the first element.
So I tried to make a backward navigation but that didn't worked:
SELECT * FROM XMLTABLE( XMLNAMESPACE('http://www.blablabla.gob/cfd/3' AS 'cfdi'), '/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto' PASSING XMLDOCS.DOC COLUMNS CONCEPTO NVARCHAR(200) PATH '@Descripcion', EMISOR NVARCHAR(200) PATH '../cfdi:Emisor/@Nombre', EMISOR2 NVARCHAR(200) PATH '../../cfdi:Emisor/@Nombre', EMISOR3 NVARCHAR(200) PATH '../../../cfdi:Emisor/@Nombre', EMISOR4 NVARCHAR(200) PATH '/cfdi:Comprobante/cfdi:Emisor/@Nombre' ) AS XTABLE;
On this last case, on "CONCEPTO" column I get 3 rows in a resultset, but NULL values for "@ Nombre" attribute.
Is this notation supported?
What am I doing wrong?