<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7390387165396694964</id><updated>2012-02-15T23:05:34.339-08:00</updated><category term='XPath'/><title type='text'>Stupid Code Tricks</title><subtitle type='html'>Things I've learned and need to write down before I forget.

If it helps a fellow code monkey, then that's even better.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-2308965772897459704</id><published>2011-06-07T06:38:00.000-07:00</published><updated>2011-06-07T06:38:40.633-07:00</updated><title type='text'>Auto Number / Sequence Generator in SQL Server</title><content type='html'>&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;This magic code will create a sequence of numbers that can be used like a primary key without having to use a table's IDENITITY column. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; ROW_NUMBER&lt;/span&gt;&lt;span class="pun"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;OVER&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;ORDER&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;BY&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; col1&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; rn&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;*&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;&lt;span style="color: darkblue;"&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt; tbl1&amp;nbsp;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-2308965772897459704?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/2308965772897459704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=2308965772897459704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/2308965772897459704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/2308965772897459704'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2011/06/auto-number-sequence-generator-in-sql.html' title='Auto Number / Sequence Generator in SQL Server'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-1529316649185277390</id><published>2009-06-16T10:33:00.000-07:00</published><updated>2009-06-16T10:37:18.187-07:00</updated><title type='text'>Using CTE (Common Table Expression)</title><content type='html'>To create a collection of rows without querying a table or a repeating series of INSERT statements.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;declare @seed int&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select @seed = 8;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WITH RecurseTable(Id)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SELECT @seed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    UNION ALL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SELECT R.Id -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM RecurseTable R&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    WHERE R.Id &gt; 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;from RecurseTable&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-1529316649185277390?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/1529316649185277390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=1529316649185277390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1529316649185277390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1529316649185277390'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2009/06/using-cte-common-table-expression.html' title='Using CTE (Common Table Expression)'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-4937259985794666485</id><published>2009-04-24T07:41:00.000-07:00</published><updated>2009-04-24T07:47:12.085-07:00</updated><title type='text'>Querying Table Definitions</title><content type='html'>A query to return metadata about a table. This is useful for dynamic query building like in a SqlAdapter, for example.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT C.COLUMN_NAME,&lt;br /&gt;       C.DATA_TYPE,&lt;br /&gt;       C.CHARACTER_MAXIMUM_LENGTH,&lt;br /&gt;       CASE WHEN PK.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END IS_KEY,&lt;br /&gt;       CASE WHEN IC.object_id IS NULL THEN 0 ELSE 1 END IS_IDENTITY&lt;br /&gt;FROM INFORMATION_SCHEMA.COLUMNS C&lt;br /&gt;       LEFT OUTER JOIN&lt;br /&gt;INFORMATION_SCHEMA.KEY_COLUMN_USAGE PK ON C.TABLE_NAME = PK.TABLE_NAME&lt;br /&gt;                                      AND C.COLUMN_NAME = PK.COLUMN_NAME&lt;br /&gt;       INNER JOIN&lt;br /&gt;sys.tables T ON C.TABLE_NAME = T.name&lt;br /&gt;            AND T.[type] = 'U'&lt;br /&gt;       LEFT OUTER JOIN&lt;br /&gt;sys.identity_columns IC ON T.object_id = IC.object_id&lt;br /&gt;                       AND IC.[name] = C.COLUMN_NAME&lt;br /&gt;WHERE C.TABLE_NAME = @TableName&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-4937259985794666485?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/4937259985794666485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=4937259985794666485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/4937259985794666485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/4937259985794666485'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2009/04/querying-table-definitions.html' title='Querying Table Definitions'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-1171114685990128524</id><published>2008-10-06T08:04:00.000-07:00</published><updated>2008-10-06T08:05:50.063-07:00</updated><title type='text'>Efficiently Rounding a SQL Server datetime</title><content type='html'>Truncates hours, minutes and seconds without messy string manipulation:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;CAST(FLOOR(CAST(GETDATE() AS DECIMAL(8,2))) AS datetime)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-1171114685990128524?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/1171114685990128524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=1171114685990128524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1171114685990128524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1171114685990128524'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2008/10/efficiently-rounding-sql-server.html' title='Efficiently Rounding a SQL Server datetime'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-1516932424251084198</id><published>2008-09-10T07:14:00.000-07:00</published><updated>2008-09-10T07:20:31.254-07:00</updated><title type='text'>Underdocumented SQL Server mail parameter</title><content type='html'>Due to popular demand, Microsoft added the @query_result_no_padding to the sp_send_dbmail stored procedure.&lt;br /&gt;&lt;br /&gt;Sadly, you wont find this in the online help. It was added as part of a Service Pack.&lt;br /&gt;&lt;br /&gt;Use this parameter to trim excess spaces from the query results attached to the email. Otherwise, the column output pads out to the length of the char OR varchar field.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;declare @t TABLE (field varchar(10))&lt;br /&gt;&lt;br /&gt;insert into @t&lt;br /&gt;select 'hello'&lt;br /&gt;&lt;br /&gt;When sent with @query_result_no_padding = 1&lt;br /&gt;the result is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;field&lt;br /&gt;-----&lt;br /&gt;hello&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;otherwise&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;field&lt;br /&gt;----------&lt;br /&gt;hello&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-1516932424251084198?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/1516932424251084198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=1516932424251084198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1516932424251084198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/1516932424251084198'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2008/09/underdocumented-sql-server-mail.html' title='Underdocumented SQL Server mail parameter'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-2646479091920336103</id><published>2008-06-06T12:38:00.000-07:00</published><updated>2008-06-06T12:39:26.481-07:00</updated><title type='text'>Decode HTML Strings in SQL Server</title><content type='html'>SET ANSI_NULLS ON&lt;br /&gt;GO&lt;br /&gt;SET QUOTED_IDENTIFIER ON&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;-- EXEC UrlDecode '%c3%a1'&lt;br /&gt;-- EXEC UrlDecode '\\Tul1ciprmw1\RichMediaAssets\Open\Telemundo\Al Rojo Vivo con Mar%c3%ada Celeste\_derived_jpg_q90_172x128_m1\3ARValx05Mar%c3%ada Celeste Arrar%c3%a1s.jpg'&lt;br /&gt;-- EXEC UrlDecode '%4D'&lt;br /&gt;&lt;br /&gt;ALTER PROCEDURE UrlDecode &lt;br /&gt; -- Add the parameters for the stored procedure here&lt;br /&gt; @URL varchar(2000)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt; -- SET NOCOUNT ON added to prevent extra result sets from&lt;br /&gt; -- interfering with SELECT statements.&lt;br /&gt; SET NOCOUNT ON;&lt;br /&gt;&lt;br /&gt; DECLARE @Position INT,&lt;br /&gt;  @Base CHAR(16),&lt;br /&gt;  @High TINYINT,&lt;br /&gt;  @Low TINYINT,&lt;br /&gt;  @NewHigh INT,&lt;br /&gt;  @Pattern CHAR(21)&lt;br /&gt;&lt;br /&gt; SELECT @Base = '0123456789abcdef',&lt;br /&gt;  @Pattern = '%[%][0-9a-f][0-9a-f]%',&lt;br /&gt;  @Position = PATINDEX(@Pattern, @URL)&lt;br /&gt;&lt;br /&gt; SELECT @High = CHARINDEX(SUBSTRING(@URL, @Position + 1, 1), @Base) -1,&lt;br /&gt;   @Low = CHARINDEX(SUBSTRING(@URL, @Position + 2, 1), @Base) -1&lt;br /&gt;&lt;br /&gt; WHILE @Position &gt; 0&lt;br /&gt; BEGIN  &lt;br /&gt;&lt;br /&gt;   IF (@High &amp; 15) = 12 -- xC0 &lt;br /&gt;   BEGIN  &lt;br /&gt;    SELECT @NewHigh = @Low * POWER(2, 6) --Shift Low 6 bits&lt;br /&gt;    &lt;br /&gt;    SELECT @High = CHARINDEX(SUBSTRING(@URL, @Position + 4, 1), @Base) -1&lt;br /&gt;    SELECT @Low = CHARINDEX(SUBSTRING(@URL, @Position + 5, 1), @Base) -1&lt;br /&gt;&lt;br /&gt;    SELECT @URL = STUFF(@URL, @Position, 6, CHAR(@NewHigh | (16 * @High) | @Low))&lt;br /&gt;&lt;br /&gt;    SELECT @High = 0, @Low = 0, @NewHigh = 0  &lt;br /&gt;&lt;br /&gt;   END&lt;br /&gt;   ELSE&lt;br /&gt;   BEGIN &lt;br /&gt;    SELECT @URL = STUFF(@URL, @Position, 3, CHAR(16 * @High | @Low))&lt;br /&gt;&lt;br /&gt;   END      &lt;br /&gt;   &lt;br /&gt;   SELECT @Position = PATINDEX(@Pattern, @URL)&lt;br /&gt;   IF @Position &gt; 0&lt;br /&gt;   BEGIN&lt;br /&gt;    SELECT @High = CHARINDEX(SUBSTRING(@URL, @Position + 1, 1), @Base) -1,&lt;br /&gt;      @Low = CHARINDEX(SUBSTRING(@URL, @Position + 2, 1), @Base) -1&lt;br /&gt;   END&lt;br /&gt; END&lt;br /&gt;&lt;br /&gt; SELECT @URL&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-2646479091920336103?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/2646479091920336103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=2646479091920336103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/2646479091920336103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/2646479091920336103'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2008/06/decode-html-strings-in-sql-server.html' title='Decode HTML Strings in SQL Server'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-8663526999211431798</id><published>2007-01-10T05:52:00.000-08:00</published><updated>2007-01-10T05:55:11.442-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><title type='text'>Selecting XPath Nodes</title><content type='html'>To select a range of nodes based on their position, use the really cool &lt;em&gt;position()&lt;/em&gt; function.&lt;br /&gt;&lt;br /&gt;Using the code example below, this syntax will get the first two nodes:&lt;br /&gt;&lt;br /&gt;var nodeList = xmlDoc.selectNodes("/root/items/item[&lt;strong&gt;position()&lt;/strong&gt;&lt;3]");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-8663526999211431798?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/8663526999211431798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=8663526999211431798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/8663526999211431798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/8663526999211431798'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2007/01/selecting-xpath-nodes.html' title='Selecting XPath Nodes'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390387165396694964.post-8920326113595903039</id><published>2006-12-27T05:28:00.000-08:00</published><updated>2006-12-27T07:20:48.188-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><title type='text'>XPath Basics</title><content type='html'>When querying an XML Document with XPath syntax, there are two things you need to identify; the node(s) you want to return and the criteria that determines which nodes qualify.&lt;br /&gt;&lt;br /&gt;In this XML document:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;   &amp;lt;items&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;One&amp;lt;/items&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;Two&amp;lt;/items&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;Three&amp;lt;/items&amp;gt;&lt;br /&gt;   &amp;lt;/items&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To get the &lt;em&gt;item&lt;/em&gt; nodes using MSXML&lt;br /&gt;var nodeList = xmlDoc.selectNodes("/root/items/item");&lt;br /&gt;&lt;br /&gt;To apply selection conditions, add brackets:&lt;br /&gt;var nodeList = xmlDoc.selectNodes("/root/items/item[.='One']");&lt;br /&gt;&lt;br /&gt;The "." in the brackets means "this node". So in plain English you're saying, "Give me all the &lt;em&gt;item&lt;/em&gt; nodes where the value is "One".&lt;br /&gt;&lt;br /&gt;You can also select nodes based on the values of child or parent nodes.&lt;br /&gt;&lt;br /&gt;Let's make the simple example above a little more complicated:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;   &amp;lt;items&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;One&amp;lt;/item&amp;gt;&lt;br /&gt;         &amp;lt;type&amp;gt;Odd Number&amp;lt;/type&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;Two&amp;lt;/item&amp;gt;&lt;br /&gt;         &amp;lt;type&amp;gt;Even Number&amp;lt;/type&amp;gt;         &lt;br /&gt;      &amp;lt;item&amp;gt;Three&amp;lt;/item&amp;gt;&lt;br /&gt;         &amp;lt;type&amp;gt;Odd Number&amp;lt;/type&amp;gt;&lt;br /&gt;   &amp;lt;/items&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To get all the nodes which have a type value of "Odd Number" you would use this syntax:&lt;br /&gt;&lt;br /&gt;var nodeList = xmlDoc.selectNodes("/root/items/item[./type='Odd Number']");&lt;br /&gt;&lt;br /&gt;Notice here that the select path still goes to the &lt;em&gt;item&lt;/em&gt; level. However, the query references the &lt;em&gt;type&lt;/em&gt; node. The XPath path symbols are nearly identical to directory structure navigation syntax. &lt;br /&gt;&lt;br /&gt;/ = levels&lt;br /&gt;. = current node&lt;br /&gt;.. = parent node&lt;br /&gt;./ = child of the current node&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7390387165396694964-8920326113595903039?l=stupidcodetricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stupidcodetricks.blogspot.com/feeds/8920326113595903039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7390387165396694964&amp;postID=8920326113595903039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/8920326113595903039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390387165396694964/posts/default/8920326113595903039'/><link rel='alternate' type='text/html' href='http://stupidcodetricks.blogspot.com/2006/12/xpath-basics.html' title='XPath Basics'/><author><name>Gordon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
