XML queries with case insensitive tag I have a requirement where i want XML tags to be case insensitive in my xml queries. 

For example:

DECLARE @myTable TABLE ( yourXML XML )  

INSERT INTO @myTable SELECT '&lt;z&gt;&lt;a&gt;&lt;b&gt;1&lt;/b&gt;&lt;c&gt;2&lt;/c&gt;&lt;/a&gt;&lt;/z&gt;'
INSERT INTO @myTable SELECT '&lt;Z&gt;&lt;A&gt;&lt;b&gt;1&lt;/b&gt;&lt;c&gt;2&lt;/c&gt;&lt;/A&gt;&lt;/Z&gt;'   

SELECT * FROM @myTable WHERE ( [yourXML].exist('for $x in /z/a where  ( ($x/b[1]) = 1 )  return $x')&gt;0 ) 


Returns output as

yourXML
&lt;z&gt;&lt;a&gt;&lt;b&gt;1&lt;/b&gt;&lt;c&gt;2&lt;/c&gt;&lt;/a&gt;&lt;/z&gt;


But i want the output to display without considering case of the XML tag. So my desired output should be

yourXML
&lt;z&gt;&lt;a&gt;&lt;b&gt;1&lt;/b&gt;&lt;c&gt;2&lt;/c&gt;&lt;/a&gt;&lt;/z&gt;
&lt;Z&gt;&lt;A&gt;&lt;b&gt;1&lt;/b&gt;&lt;c&gt;2&lt;/c&gt;&lt;/A&gt;&lt;/Z&gt;


How it can be done?
Use predicates with name tests like this instead of "simple" node steps:

/*[lower-case(local-name(.)) = 'z']/*[lower-case(local-name(.)) = 'a']