File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes XML and Related Technologies and the fly likes Using XML in search criteria rather than hard coding it Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Engineering » XML and Related Technologies
Bookmark "Using XML in search criteria rather than hard coding it " Watch "Using XML in search criteria rather than hard coding it " New topic
Author

Using XML in search criteria rather than hard coding it

Paul Carron
Greenhorn

Joined: Jul 25, 2007
Posts: 3
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 : " +
doc.getDocumentElement().getNodeName());

//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 : " +
((Node)textCountryList.item(0)).getNodeValue().trim());

//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 : " +
((Node)textBeginsWithList.item(0)).getNodeValue().trim());

//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 : " +
((Node)textExtensionList.item(0)).getNodeValue().trim());


}//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"?>

<file>
<file_details>
<country>Ireland</country>
<starts_with>A</starts_with>
<extension>.txt</extension>
<message>Irish Financial Regulator</message>
</file_details>
</file>

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
Rancher

Joined: Mar 22, 2000
Posts: 12835
    
    5
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.

Bill
Paul Carron
Greenhorn

Joined: Jul 25, 2007
Posts: 3
Cheers. Sorted now.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Using XML in search criteria rather than hard coding it