[Risolto] estrazione dati xml con Mysql

Ciao a tutti.

Ho un problema:
Devo estrarre il valori di un attributo XML tramite una query su DB Mysql.

Esempio:

select id, ExtractValue(XML,'//ATTRIBUTE@NAME="INST_ID"]') from INST where id in(...) and status='E';
Ho provato ad inserire l’intero percorso ma il risultato e’ sempre quello. Mi restituisce un campo vuoto.

Questo persorso invece funziona

ExtractValue(XML_2,'//parameter@id="JOB_ID"]')

Spero di essere stato chiaro, e come sempre confido nel vostro risolutivo aiuto.

Ciao , non ricevendo risposta…ho pensato che sono stato troppo sintetico e quindi non ho spiegato bene il mio problema.
Quello che vorrei sapere è se ho scritto bene il percorso-xml all’interno della funzione mysql ExtractValue().
Perchè, se cerco il parametro funziona, quando invece cerco gli attributi, non mi restituisce niente.(output nessuno errore)ma il campo relativo che dovrebbe riportare il valore dell’attibuto è vuoto.
Sbaglio io, o non è del tutto performante la funzione?
In fin dei conti è questa la domanda.
Io credo che sbaglio io a dargli il percorso esatto…magari qualcuno di voi sa aiutarmi…speriamo :slight_smile:

Ciaooo

Io la notazione XPath non la conosco tanto bene…
Sei sicuro che sia proprio corretto quel che hai scritto? Maiuscole e minuscole? Pattern?
Non puoi fornirci un po’ di tuple di esempio?

Ciao Marios, infatti non ne sono sicuro :slight_smile:
però mi sembra strano che riesco ad estrarre i dati da un file xml e non riesco a farlo da un altro seppur con struttura e dimensioni diverse.

L 'Xpath del primo XML è composto solo da alcuni parametri,
invece L’Xpath del secondo è pieno di attributi.Vorrà dire qualcosa?

Cmq ti posto le tuple dell’estrazione fallita

id ExtractValue(XML;'/DATA/DATATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]//ATTRIBUTE[5]') 4046.. {null} 404.. 4046.. 4046.. 404..

PS:ho usato il path completo…niente da fare.

Intendevo proprio il codice xml da visionare…

Eccolo:

<DATA> <IDHEADER ID="xxxxxxx" LABEL="ACT" NATTRIBUTES="2"/> <ATTRIBUTES> <ATTRIBUTE NAME="xxx" VALUE="xxx"/> <ATTRIBUTE NAME="xxx" VALUE="xxx"/> <ATTRIBUTE NAME="xxx" VALUE="xxx"/> <ATTRIBUTE NAME="xxx" VALUE="xxx"/> <ATTRIBUTE NAME="xxx" VALUE="xxx"/> . . . <LISTATTRIBUTES LISTNAME="ACCOUNT"> <LISTELEMENT NAME="ADDRESS"> <ATTRIBUTE NAME="COUNTRY" VALUE="ITALIA"/> <ATTRIBUTE NAME="PROVINCE" VALUE="xxx"/> . . . </LISTELEMENT> <LISTELEMENT NAME="ACCOUNT_ATTRIBUTES"> <ATTRIBUTE NAME="PAYTYPE" VALUE="x"/> **<ATTRIBUTE NAME="INST_ID" VALUE="xxxx"/> -- dovrei estrarre il valore di questo ID** </LISTELEMENT> </LISTATTRIBUTES> . . . </ATTRIBUTES> </DATA>

Così?

/DATA/ATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]/ATTRIBUTE[5]

IL percorso che hai scritto sembra esatto ma se guardi sul post precedente è esattamente quello che ho scritto anche io.

[quote]id ExtractValue(XML;’/DATA/DATATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]//ATTRIBUTE[5]’)
4046… {null}
404…
4046…
4046…
404…[/quote]
A questo punto ho paura che sia un bug della funzione ExtraValue, che non estrae i valori degli attributi.
Anche se non mi piace trovare giusticazioni di questo tipo…"come quando si creano i primi programmini …e non funzionano…allora la colpa è sempre del compilatore che non va :smiley: "

Z_E_P non sono uguali, porta attenzione:

/DATA/ATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]/ATTRIBUTE[5] 

il tuo:

/DATA/DATATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]//ATTRIBUTE[5]

E’ vero, me ne sono accorto un attimo dopo, cmq l’ho provato
è il risultato è sempre quello…purtroppo

id ExtractValue(XML;'/DATA/ATTRIBUTES/LISTATTRIBUTES[1]/LISTELEMENT[2]/ATTRIBUTE[5]') 404.. 404.. 404.. 404..

Ho risolto, occorre specificare anche il valore dell’attributo.

XPath:

'//LISTELEMENT[2]//ATTRIBUTE[5]/@VALUE'
Ho preso spunto da qui http://www.di.univaq.it/gdellape/xml/XMLDoc.php

Ciao e alla prox

Bene che sei riuscito a risolvere :slight_smile:
Come detto non sono afferrato in Xpath :-sorry-:

Il tuo aiuto è stato sempre risolutivo, questa volta è stato di supporto ma importantissimo (a volte sei umano anche tu…no? :smiley: )

Grazie mille.