import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.io.DOMWriter;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class PerfDOM4JAttr {
public static void main(String args[]) {
Document doc;
try {
int numrec = 1;
numrec = 10000;
System.out.println("\n1000 Elements -------------------");
doc = PerfDOM4JAttr.createDocument(numrec, 20, 1);
PerfDOM4JAttr.createW3CDOM(doc);
PerfDOM4JAttr.write(doc, "DOM4JAttr_" + numrec + ".xml");
PerfDOM4JAttr.parse(numrec, 1);
// PerfDOM4JAttr.transform(doc,"item.xslt",1);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"1\"]", 3);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"500\"]", 3);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"999\"]", 3);
PerfDOM4JAttr
.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"1\"]", 3);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"500\"]",
3);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"999\"]",
3);
PerfDOM4JAttr.xpathNodes(doc, "/*/Item", 100);
numrec = 1000;
System.out.println("\n1000 Elements -------------------");
doc = PerfDOM4JAttr.createDocument(numrec, 20, 1);
PerfDOM4JAttr.createW3CDOM(doc);
PerfDOM4JAttr.write(doc, "DOM4JAttr_" + numrec + ".xml");
PerfDOM4JAttr.parse(numrec, 3);
PerfDOM4JAttr.transform(doc, "item.xslt", 3);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"1\"]", 3);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"500\"]", 3);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"999\"]", 3);
PerfDOM4JAttr
.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"1\"]", 3);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"500\"]",
3);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"999\"]",
3);
PerfDOM4JAttr.xpathNodes(doc, "/*/Item", 100);
numrec = 100;
System.out.println("\n100 Elements --------------------");
doc = PerfDOM4JAttr.createDocument(numrec, 20, 10);
PerfDOM4JAttr.createW3CDOM(doc);
PerfDOM4JAttr.write(doc, "DOM4JAttr_" + numrec + ".xml");
PerfDOM4JAttr.parse(numrec, 10);
PerfDOM4JAttr.transform(doc, "item.xslt", 10);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"1\"]", 10);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"50\"]", 10);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"99\"]", 10);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"1\"]",
10);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"50\"]",
10);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"99\"]",
10);
PerfDOM4JAttr.xpathNodes(doc, "/*/Item", 100);
numrec = 10;
System.out.println("\n10 Elements ---------------------");
doc = PerfDOM4JAttr.createDocument(numrec, 20, 100);
PerfDOM4JAttr.createW3CDOM(doc);
PerfDOM4JAttr.write(doc, "DOM4JAttr_" + numrec + ".xml");
PerfDOM4JAttr.parse(numrec, 100);
PerfDOM4JAttr.transform(doc, "item.xslt", 10);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"1\"]", 100);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"5\"]", 100);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"9\"]", 100);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"1\"]",
100);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"5\"]",
100);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"9\"]",
100);
PerfDOM4JAttr.xpathNodes(doc, "/*/Item", 100);
numrec = 1;
System.out.println("\n1 Element -----------------------");
doc = PerfDOM4JAttr.createDocument(numrec, 20, 100);
PerfDOM4JAttr.createW3CDOM(doc);
PerfDOM4JAttr.write(doc, "DOM4JAttr_" + numrec + ".xml");
PerfDOM4JAttr.parse(numrec, 100);
PerfDOM4JAttr.transform(doc, "item.xslt", 10);
PerfDOM4JAttr.xpath(doc, "/ItemResultSet/Item[@guid=\"1\"]", 100);
PerfDOM4JAttr.xpathNodes(doc, "/ItemResultSet/Item[@guid=\"1\"]",
100);
PerfDOM4JAttr.xpathNodes(doc, "/*/Item", 100);
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static Document createDocument(int iNumRecs, int iNumFlds, int pp) {
double start = System.currentTimeMillis();
Document document = null;
for (int kk = 0; kk < pp; kk++) {
document = DocumentHelper.createDocument();
Element root = document.addElement("ItemResultSet");
for (int ii = 0; ii < iNumRecs; ii++) {
Element Record = root.addElement("Item").addAttribute("guid",
"" + ii);
for (int jj = 0; jj < iNumFlds; jj++) {
Record.addAttribute("Attr" + jj, "123456789");
}
}
}
double end = System.currentTimeMillis();
System.err.println("Creation time : " + (end - start) / pp);
return document;
}
public static Document parse(int iNumRecs, int kk) {
File file = new File("DOM4JAttr_" + iNumRecs + ".xml");
double start = System.currentTimeMillis();
Document document = null;
for (int pp = 0; pp < kk; pp++) {
try {
SAXReader SAXrd = new SAXReader();
SAXrd.read(file);
} catch (Exception e) {
e.printStackTrace();
}
}
double end = System.currentTimeMillis();
System.err.println("Parsing time for :" + 1.000 * (end - start) / kk);
return document;
}
public static void createW3CDOM(Document doc) {
long start = System.currentTimeMillis();
try {
DOMWriter dw = new DOMWriter();
dw.write(doc);
} catch (Exception de) {
}
long end = System.currentTimeMillis();
System.err.println("W3C Creation time for :" + (end - start));
}
public static void write(Document document, String name) throws IOException {
long start = System.currentTimeMillis();
// lets write to a file
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(name), format);
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.err.println("DOM4JAttr File write time :" + (end - start)
+ " " + name);
}
public static void transform(Document xmlDoc, String xslFile, int kk) {
System.err.println("DOM4JAttr start transform ");
int ii = 1;
try {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(
xslFile));
long start = System.currentTimeMillis();
for (ii = 0; ii < kk; ii++) {
Source source = new DocumentSource(xmlDoc);
DocumentResult result = new DocumentResult();
transformer.transform(source, result);
// output the transformed document
}
long end = System.currentTimeMillis();
System.err.println("DOM4JAttr transform time :" + (end - start)
/ ii);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void xpath(Document document, String xpathExp, int kk) {
long start = System.currentTimeMillis();
XPath xpath = document.createXPath(xpathExp);
for (int ii = 0; ii < kk; ii++) {
Node node = xpath.selectSingleNode(document);
if ((node != null) & (ii == 0)) {
String val = node.getStringValue();
// System.out.println("xpath OK:"+val);
}
}
long end = System.currentTimeMillis();
System.err.println("DOM4JAttr xpath time :" + (end - start) / kk);
}
public static void xpathNodes(Document document, String xpathExp, int kk) {
long start = System.currentTimeMillis();
XPath xpath = document.createXPath(xpathExp);
for (int ii = 0; ii < kk; ii++) {
try {
List nodeList = xpath.selectNodes(document);
if ((nodeList != null) && (nodeList.size() > 0)) {
Node node = (Node) nodeList.get(0);
if ((node != null) & (ii == 0)) {
String val = node.getStringValue();
// System.out.println("xpathNodes OK:"+val);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.err.println("DOM4JAttr xpath Nodes time :" + 1.000
* (end - start) / kk);
}
}