Click here to Skip to main content
13,797,648 members
Click here to Skip to main content
Add your own
alternative version


40 bookmarked
Posted 28 Sep 2005

Searching multiple XML files

, 28 Sep 2005
Rate this:
Please Sign up or sign in to vote.
A simple utility to quickly find nodes and attributes inside multiple XML files.


Did you ever need to find specific text inside an XML file? Or did you ever need to identify, in a set of XML files, those containing a specific text? If yes, probably you used some kind of "multiple file search" utility, or simply the operating system "Search" feature, able to locate files containing a given text string. This is obviously a suitable solution for many cases. But... what about looking for specific text appearing in specific locations of the XML structure? For example: if you need to identify XML files containing a string inside a particular attribute value and *not* somewhere else, a generic text search tool becomes useless.

The simple utility presented here, named "XML Search", addresses this problem, implementing a multiple XML file search mechanism that takes care of the XML file structure.

How the utility works

The utility I wrote is very simple: given an "input" folder, it looks for XML files in that folder (and eventually subfolders), loading them - one by one - into an XmlDocument object, and looking for specific elements that match the search criteria you specified. The search outcome is a list of the successfully matching files, with the matching XML fragment highlighted.

XML Search user interface

Instead of an "input" folder, you can also specify a single file: in this case, the search task is limited to the given file content.

The search criteria are basically identified by an XPath expression you specify in the "Node selection condition" textbox: this expression will be used to select (in each XML file) the XML nodes where the tool will look for the text string you typed in the "Find what" textbox.

Some option buttons allow you to specify if the search has to be done:

  • on the InnerText property of the selected nodes
  • on the InnerXML property of the selected nodes
  • on the OuterXML property of the selected nodes
  • on a specific attribute value of the selected nodes

You can also use the XML Search tool just to locate XML files containing specific nodes or attributes (when their value doesn't matter): to achieve this, you'll use the "Just check for node existence" option.

In the XPath search condition you may want to omit the root element of the XML structure; in this case you will check the "Start from DocumentElement" checkbox.

If you need a case-sensitive search, you will check the "Match case" checkbox (default search is case-insensitive on the "Find what" value, but be aware that the XPath expression is always case-sensitive).

If you need to exactly look for a given value, you will check the "Match whole text" checkbox; otherwise, the "Find what" value will be searched inside the XML fragment selected by your search criteria.

When the search ends, a list of matching files will be displayed:

  • by clicking on a specific item in the list, the bottom panel will show the matching XML fragment found in that file (normally, the matching XML fragment is extracted from the OuterXML property of a matching node).
  • by right-clicking on a specific item in the list, you'll get a context menu allowing you to copy on the Windows Clipboard: the entire content of the selected file, the filename of the selected file, the full path of the selected file (last two options are also active when multiple items are selected in the file list).

Points of interest

The XML Search utility is very simple: it essentially puts together a recursive folder scanning with an XML DOM computation based on the SelectNodes method. The power of .NET classes makes the rest.

For the XML fragments displaying in the bottom panel, I used the very good "XML TreeView Control" found on CodeProject: I have to thank Thomas Siepe for it. I invite you to read his article about the control.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Alberto Venditti
Technical Lead
Italy Italy
I was born in 1970.

My first computer experience dates back to early 80s, with a Sinclair ZX81.
From that time on, as many "friends" say, my IT-illness has increased year by year.

I graduated in Electronic Engineering and earned the following Microsoft certifications:
MCP, MCT, MCDBA, MCSD, MCAD, MCSD for .NET (early achiever).

I worked in IT as a developer, a teacher, a consultant, a technical writer, a technical leader.
IT knowledge applied to real life is my primary interest and focus.

You may also be interested in...

Comments and Discussions

QuestionHow do I find the following attribute in multiple files with you App Pin
Member 122448335-Jan-16 0:38
memberMember 122448335-Jan-16 0:38 
AnswerRe: How do I find the following attribute in multiple files with you App Pin
Alberto Venditti5-Jan-16 12:18
memberAlberto Venditti5-Jan-16 12:18 
Questionmultiple results per file? Pin
eddieb2124-Oct-11 2:15
membereddieb2124-Oct-11 2:15 
This code is great. Thank you. It seems, though, to only return the first matching result for each article. Is there a way to get the search to return all results or nodes that match the search string?

Thank you.
AnswerRe: multiple results per file? Pin
Alberto Venditti4-Dec-11 7:39
memberAlberto Venditti4-Dec-11 7:39 
QuestionNode Section condition Pin
Raider3bravo17-Aug-11 11:16
memberRaider3bravo17-Aug-11 11:16 
AnswerRe: Node Section condition Pin
Alberto Venditti18-Aug-11 5:06
memberAlberto Venditti18-Aug-11 5:06 
QuestionMultithreading? Pin
HoyaSaxa9317-Aug-09 15:05
memberHoyaSaxa9317-Aug-09 15:05 
AnswerRe: Multithreading? Pin
Alberto Venditti30-Aug-09 23:42
memberAlberto Venditti30-Aug-09 23:42 
GeneralRe: Multithreading? Pin
HoyaSaxa9331-Aug-09 5:41
memberHoyaSaxa9331-Aug-09 5:41 
GeneralNice job. Just what I was looking for. Pin
gary caden16-Apr-09 9:15
membergary caden16-Apr-09 9:15 
GeneralRe: Nice job. Just what I was looking for. Pin
JMWTech11-Dec-09 5:51
memberJMWTech11-Dec-09 5:51 
GeneralRe: Nice job. Just what I was looking for. Pin
Alberto Venditti10-Jan-10 4:25
memberAlberto Venditti10-Jan-10 4:25 
Generalhelp with a problem Pin
Catherine Bell26-Mar-09 4:56
memberCatherine Bell26-Mar-09 4:56 
GeneralRe: help with a problem Pin
Alberto Venditti27-Mar-09 3:25
memberAlberto Venditti27-Mar-09 3:25 
Generalvery good, clean and effective and easy to follow Pin
androoo26-Sep-06 12:00
memberandrooo26-Sep-06 12:00 
GeneralInner/Outer XML and text searches Pin
VBProEd23-Mar-06 12:41
memberVBProEd23-Mar-06 12:41 
GeneralRe: Inner/Outer XML and text searches Pin
Alberto Venditti23-Mar-06 21:46
memberAlberto Venditti23-Mar-06 21:46 
GeneralRe: Inner/Outer XML and text searches Pin
VBProEd25-Mar-06 10:44
memberVBProEd25-Mar-06 10:44 
QuestionQuestions about Microsoft Exams you passed Pin
egc10128-Oct-05 10:31
memberegc10128-Oct-05 10:31 
AnswerRe: Questions about Microsoft Exams you passed Pin
Alberto Venditti28-Oct-05 22:52
memberAlberto Venditti28-Oct-05 22:52 
QuestionHow about a code download? Pin
seanwright29-Sep-05 6:49
memberseanwright29-Sep-05 6:49 
AnswerRe: How about a code download? Pin
Alberto Venditti29-Sep-05 9:20
memberAlberto Venditti29-Sep-05 9:20 
GeneralRe: How about a code download? Pin
Hypnotron30-Jul-06 8:34
memberHypnotron30-Jul-06 8:34 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web03 | 2.8.181207.3 | Last Updated 28 Sep 2005
Article Copyright 2005 by Alberto Venditti
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid