XMLe XPath http://blogs.ugidotnet.org/PietroLibroBlog/category/XMLe XPath.aspx XMLe XPath it-IT Pietro Libro pietro.libro@libero.it Subtext Version 2.6.0.0 XPath: ricerche &quot;case-insensitive&quot; sui nomi dei nodi http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/08/12/93684.aspx <p>Se ad esempio abbiamo un file XML del tipo (normalmente non dovrebbe accadere :-)) :</p> <p> </p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:cd563da0-2844-4a4b-a878-d5fe76d6b922" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #0000FF;">&lt;?</span><span style="color: #FF00FF;">xml version="1.0" encoding="utf-8" </span><span style="color: #0000FF;">?&gt;</span><span style="color: #000000;"> </span><span style="color: #008080;">2</span> <span style="color: #000000;"></span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">persone</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;"> </span><span style="color: #008080;">3</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">persona </span><span style="color: #FF0000;">id</span><span style="color: #0000FF;">="1"</span><span style="color: #0000FF;">&gt;&lt;/</span><span style="color: #800000;">persona</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;"> </span><span style="color: #008080;">4</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">PERSONA </span><span style="color: #FF0000;">id</span><span style="color: #0000FF;">="2"</span><span style="color: #0000FF;">&gt;&lt;/</span><span style="color: #800000;">PERSONA</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;"> </span><span style="color: #008080;">5</span> <span style="color: #000000;"> </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">perSona </span><span style="color: #FF0000;">id</span><span style="color: #0000FF;">="3"</span><span style="color: #0000FF;">&gt;&lt;/</span><span style="color: #800000;">perSona</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;"> </span><span style="color: #008080;">6</span> <span style="color: #000000;"></span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">persone</span><span style="color: #0000FF;">&gt;</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>e tramite XPath vogliamo recuperare tutti i nodi <em>persona </em>figli di <em>persone</em>, dato che le ricerche XPath (e XML) sono case-sensitive, possiamo utilizzare la funzione XPath translate() in questo modo:</p> <p> </p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f8ef3f19-7f12-451f-b6ea-a02c75322c05" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #000000;">XmlDocument xmlDocTest </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">new</span><span style="color: #000000;"> XmlDocument(); </span><span style="color: #008080;">2</span> <span style="color: #000000;">xmlDocTest.Load(</span><span style="color: #800000;">"</span><span style="color: #800000;">esempio.xml</span><span style="color: #800000;">"</span><span style="color: #000000;">); </span><span style="color: #008080;">3</span> <span style="color: #000000;">XmlNodeList list </span><span style="color: #000000;">=</span><span style="color: #000000;"> xmlDocTest.SelectNodes(</span><span style="color: #800000;">"</span><span style="color: #800000;">//persone/*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='persona']</span><span style="color: #800000;">"</span><span style="color: #000000;">); </span><span style="color: #008080;">4</span> <span style="color: #000000;"> </span><span style="color: #008080;">5</span> <span style="color: #000000;"></span><span style="color: #0000FF;">foreach</span><span style="color: #000000;"> (XmlNode nodeItem </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> list) </span><span style="color: #008080;">6</span> <span style="color: #000000;"> Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">Nodo </span><span style="color: #800000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> nodeItem.Attributes[</span><span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span><span style="color: #000000;">].Value);</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>Dove :</p> <p>local-name() - restituisce il nome locale di un nodo senza il prefisso di namespace</p> <p>translate() - Ritorna la sottostringa all'interno del primo argomento sostituendo i caratteri del secondo argomento con quello del terzo.</p> <p>Se invece di eseguire la conversione in minuscolo, volessimo eseguire la conversione in maiuscolo basterebbe sostituire l'espressione XPath precedente:</p> <div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:7fcf791b-24ad-407f-8382-0a38cbcbd12f" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #800000;">"</span><span style="color: #800000;">//persone/*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='persona']</span><span style="color: #800000;">"</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>con la seguente:</p> <p> </p><div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:6922d965-a7dd-41ff-9fdf-2d8b85f2b1b1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: auto;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #008080;">1</span> <span style="color: #800000;">"</span><span style="color: #800000;">//persone/*[translate(local-name(),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='PERSONA']</span><span style="color: #800000;">"</span></div></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div> <p>L'utilizzo di una delle due espressioni conduce ovviamente allo stesso risultato.</p> <p> </p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2e2fc8a6-8a1f-4426-92bc-fa35af35d79d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tag: <a href="http://technorati.com/tags/XPath" rel="tag">XPath</a>,<a href="http://technorati.com/tags/Translate()" rel="tag">Translate()</a></div><img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/93684.aspx" width="1" height="1" /> Pietro Libro http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/08/12/93684.aspx Tue, 12 Aug 2008 11:02:06 GMT http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/08/12/93684.aspx#feedback http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/93684.aspx http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/93684.aspx