XQuery Path – Quering XML database data type with SQL

XQuery Path – Quering XML database data type with SQL

E' possibile effettuare delle query XPath mediante SQL su campi di tipo XML.

Supponiamo di avere una tabella "Test" con un campo XML "de_xml" con il seguente XML:

<?xml version="1.0" encoding="utf-16"?> <dati_xml> <utente id="1"> <nome>Mario</nome> <gruppo>Users</gruppo> </utente> </dati_xml>

La seguente XQuery

SELECT de_xml.query('data(/dati_xml/utente[@id="1"]/nome)') FROM Test

ritornerà "Mario" come risultato.

Mentre la seguente query XQuery

SELECT de_xml.query(&#39;(/dati_xml/utente[@id=&quot;1&quot;]/nome)&#39;)<br /> FROM Test

ritorna il nodo <nome>Mario</nome>

Nello snippet seguente viene illustrata la possibilità di effettuare delle query XPath in una query T-SQL su campi di tipo XML.

Supponiamo di avere una tabella sul database chiamata “Test” con una colonna di tipo XML chiamata “colonna_xml” con il seguente valore:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;
&lt;dati_xml&gt;
 &lt;utente id=&quot;1&quot;&gt;
  &lt;nome&gt;Mario&lt;/nome&gt;
  &lt;gruppo&gt;Users&lt;/gruppo&gt;
 &lt;/utente&gt;
&lt;/dati_xml&gt;

La seguente XQuery

SELECT colonna_xml.query('data(/dati_xml/utente[@id=&quot;1&quot;]/nome)')
  FROM Test

ritornerà “Mario” come risultato.

Mentre la seguente query XQuery

SELECT colonna_xml.query('(/dati_xml/utente[@id=&amp;quot;1&amp;quot;]/nome)')
  FROM Test

ritorna il nodo Mario.

Un altro esempio si XQuery Path è la seguente:

DECLARE @myXML2 XML
SET		@myXML2 = 
'&lt;MyList&gt;
	&lt;item attributo1=&quot;value11&quot; attributo2=&quot;value12&quot; /&gt;
	&lt;item attributo1=&quot;value21&quot; attributo2=&quot;value22&quot; /&gt;
&lt;/MyList&gt;'

SELECT T.Item.value('@attributo1' , 'varchar(10)') AS Attributo1,
	T.Item.value('@attributo2' , 'varchar(10)') AS Attributo2

FROM @myXML2.nodes('//MyList/item') AS T(Item)

che restituisce la seguente tabella:

Attributo1 Attributo2
value11 value12
value21 value22

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.