• Post Reply Bookmark Topic Watch Topic
  • New Topic

Using XML in search criteria rather than hard coding it  RSS feed

Paul Carron
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have the following program:

import java.io.File;
import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class FindFile{

public static void main (String args []){

try {

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("Files.xml"));

// normalize text representation
doc.getDocumentElement ().normalize ();
System.out.println ("Root element of the doc is : " +

//number of files
NodeList fileDetails = doc.getElementsByTagName("file_details");
int totalFiles = fileDetails.getLength();
System.out.println("Total no of files : " + totalFiles);

for(int s=0; s<fileDetails.getLength() ; s++){

Node countryNode = fileDetails.item(s);
if(countryNode.getNodeType() == Node.ELEMENT_NODE){

Element fileElement = (Element)countryNode;

//Get the country each file applys to
NodeList countryList = fileElement.getElementsByTagName("country");
Element countryNameElement = (Element)countryList.item(0);

NodeList textCountryList = countryNameElement.getChildNodes();
System.out.println("Country Name : " +

//Get the letter each file begins with
NodeList fileBeginsWith = fileElement.getElementsByTagName("starts_with");
Element lastNameElement = (Element)fileBeginsWith.item(0);

NodeList textBeginsWithList = lastNameElement.getChildNodes();
System.out.println("File Name Begins With : " +

//find the extension type
NodeList extensionType = fileElement.getElementsByTagName("extension");
Element extensionElement = (Element)extensionType.item(0);

NodeList textExtensionList = extensionElement.getChildNodes();
System.out.println("The extension type is : " +

}//end of if clause

}//end of for loop with s var

}catch (SAXParseException err) {
System.out.println ("** Parsing error" + ", line "
+ err.getLineNumber () + ", uri " + err.getSystemId ());
System.out.println(" " + err.getMessage ());

}catch (SAXException e) {
Exception x = e.getException ();
((x == null) ? e : x).printStackTrace ();

}catch (Throwable t) {
t.printStackTrace ();

//Was commented out
System.exit (0);

It reads the XML below:

<?xml version="1.0" encoding="UTF-8"?>

<message>Irish Financial Regulator</message>

I also have this program which finds the latest modified file in a folder:

import java.io.File;

public class FindLatestFile {

public static File getLatest(File thisDir){
long latestModDate = -1;
File latestFile = null;
File[] fileList = thisDir.listFiles();
for(int i=0; i >< fileList.length; i++){
File file = fileList[i];
if (file.lastModified() > latestModDate & (file.getName().startsWith("A") & file.getName().endsWith(".txt"))) {
latestModDate = file.lastModified();
latestFile = file;
return latestFile;


What I want to do is to use my FindLatestFile program but to in some way incorporate my code from FindFile so that instead of hard coding the search criteria I want to include in my search, the criteria will be read from the XML.

I hope that is clear. If not please free to ask questions.

Any help would be greatly appreciated.
William Brogden
Author and all-around good cowpoke
Posts: 13078
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Creating search expressions dynamically from text input sounds to me like a job for the XPath API. Java standard library since 1.5 contains the javax.xml.xpath package which provides for evaluation of XPath expressions.

I wrote this introductory article on XPath in Java 1.5.

E. Harolds chapter on using XPath is available online.

Paul Carron
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Cheers. Sorted now.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!