Coach


In pieno rock ".net" roll
Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005

Una query xpath particolare

L'altro giorno un'amico (Francesco)mi chiedeva come poter recuperare un nodo sapendo il suo valore ovvero prendiamo questo esempio

<?xml version="1.0" encoding="utf-8" ?>
<Ricerche>
<Utente Id='Admin'>
<Id Id='Temp'></Id>
<NumeroConto>Prova</NumeroConto>
<DataOra0></DataOra0>
<DataOra1></DataOra1>
<SwStato0></SwStato0>
<SwStato1></SwStato1>
<sort></sort>
<order></order>
</Utente>
<Utente Id="2">
<Id Id='1'></Id>
<NumeroConto></NumeroConto>
<DataOra0></DataOra0>
<DataOra1>Prova</DataOra1>
<SwStato0></SwStato0>
<SwStato1></SwStato1>
<sort></sort>
<order></order>
</Utente>
</Ricerche>


Da subito gli ho detto se vuoi fare una ricerca con attributo è semplice fai
XmlDocument doc = new XmlDocument
doc.Load(path)
XmlNode node = doc.SelectSingleNode("//Utente[@Id='1']")

In questo modo ritorna il nodo utente con l'attributo id = 1
Allora non ero riuscito a trovare una soluzione al suo problema e quindi giustamente aveva postato il problema sul forum di dotnethell, allora siccome mi piacciono le sfide ho cercato e trovato la soluzione che riporto qui, visto che magari qualcuno non è registrato sul forum.

In pratica la query xpath per recuperare un nodo sapendo il suo valore è questa
doc.SelectSingleNode("//nodo[.='valore']") in pratica con il punto gli viene indicato che deve lavorare sul nodo.

Infine francesco ha trovato la soluzione che cercava e la riporto subito
doc.ChildNodes(1).SelectSingleNode("Utente/Id[.='Prova']")
Questo comando riporta il nodo <ID> del primo Nodo quello con Utente Admin

doc.ChildNodes(1).SelectSingleNode("Utente[.='Prova']")
Questo comando riporta il nodo <UTENTE> che ha come valore all'interno del suo nodo o di un suo sottonodo il valore "Prova"

doc.ChildNodes(1).SelectSingleNode("Utente[./DataOra1='Prova']")
Infine questo comando (che effettivamente è quello che serviva a me) ...
in questo caso viene riportato il primo nodo <UTENTE> rintracciato che ha come valore nel campo DataOra1 il valore Prova ...


Insomma xpath ancora una volta si dimostra un'ottimo "linguaggio" di ricerca, ma xquery è ancora meglio...rimanete sintonizzati
Categoria: XML
giovedì, 13 ott 2005 Ore. 19.24
  • Views Home Page: 240.686
  • Views Posts: 665.104
  • Views Gallerie: 297.363
  • n° Posts: 484
  • n° Commenti: 275












Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003