Skip to Content
0

XMLTABLE XPATH navigation problem on HANA

Mar 14 at 04:38 PM

47

avatar image

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?

10 |10000 characters needed characters left characters exceeded
* Please Login or Register to Answer, Follow or Comment.

0 Answers