posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

XPath: ricerche "case-insensitive" sui nomi dei nodi

Se ad esempio abbiamo un file XML del tipo (normalmente non dovrebbe accadere :-)) :

1 <?xml version="1.0" encoding="utf-8" ?> 2 <persone> 3 <persona id="1"></persona> 4 <PERSONA id="2"></PERSONA> 5 <perSona id="3"></perSona> 6 </persone>

e tramite XPath vogliamo recuperare tutti i nodi persona figli di persone, dato che le ricerche XPath (e XML) sono case-sensitive, possiamo utilizzare la funzione XPath translate() in questo modo:

1 XmlDocument xmlDocTest = new XmlDocument(); 2 xmlDocTest.Load("esempio.xml"); 3 XmlNodeList list = xmlDocTest.SelectNodes("//persone/*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='persona']"); 4 5 foreach (XmlNode nodeItem in list) 6 Console.WriteLine("Nodo " + nodeItem.Attributes["id"].Value);

Dove :

local-name() - restituisce il nome locale di un nodo senza il prefisso di namespace

translate() - Ritorna la sottostringa all'interno del primo argomento sostituendo i caratteri del secondo argomento con quello del terzo.

Se invece di eseguire la conversione in minuscolo, volessimo eseguire la conversione in maiuscolo basterebbe sostituire l'espressione XPath precedente:

1 "//persone/*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='persona']"

con la seguente:

1 "//persone/*[translate(local-name(),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='PERSONA']"

L'utilizzo di una delle due espressioni conduce ovviamente allo stesso risultato.

 

Technorati Tag: ,

Print | posted on martedì 12 agosto 2008 13:02 | Filed Under [ XMLe XPath ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET