I am going to create a utility application in JAVA for reading the XML document using SAX parser. The application will look like:
Input File :
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Movies> <Movie Actor="Aamir Khan" Name="Lagaan" Type="BollyWood"> This is node description for Movie Lagaan </Movie> <Movie Actor="Aamir Khan" Name="Andaaz Apana Apna" Type="BollyWood" /> <Movie Actor="Salman Khan" Name="Dabang" Type="BollyWood" /> <Movie Actor="Salman Khan" Name="Wanted" Type="BollyWood" /> <Movie Actor="AKshay Kumar" Name="Mujhse Shadi karoge" Type="BollyWood" /> <Movies2011> <jan> Yamla Pagala Deewana </jan> </Movies2011> </Movies>
Code:
package com.G2.SAX; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XMLTreeViewer extends DefaultHandler { private JTree xmlJTree; DefaultTreeModel treeModel; int lineCounter; DefaultMutableTreeNode base = new DefaultMutableTreeNode("XML Viewer"); static XMLTreeViewer treeViewer = null; JTextField txtFile = null; @Override public void startElement(String uri, String localName, String tagName, Attributes attr) throws SAXException { DefaultMutableTreeNode current = new DefaultMutableTreeNode(tagName); base.add(current); base = current; for (int i = 0; i < attr.getLength(); i++) { DefaultMutableTreeNode currentAtt = new DefaultMutableTreeNode(attr.getLocalName(i) + " = " + attr.getValue(i)); base.add(currentAtt); } } public void skippedEntity(String name) throws SAXException { System.out.println("Skipped Entity: '" + name + "'"); } @Override public void startDocument() throws SAXException { super.startDocument(); base = new DefaultMutableTreeNode("XML Viewer"); ((DefaultTreeModel) xmlJTree.getModel()).setRoot(base); } public void characters(char[] ch, int start, int length) throws SAXException { String s = new String(ch, start, length).trim(); if (!s.equals("")) { DefaultMutableTreeNode current = new DefaultMutableTreeNode("Descrioption : " + s); base.add(current); } } public void endElement(String namespaceURI, String localName, String qName) throws SAXException { base = (DefaultMutableTreeNode) base.getParent(); } public static void main(String[] args) { treeViewer = new XMLTreeViewer(); // treeViewer.xmlSetUp(); treeViewer.createUI(); } @Override public void endDocument() throws SAXException { // Refresh JTree ((DefaultTreeModel) xmlJTree.getModel()).reload(); expandAll(xmlJTree); } public void expandAll(JTree tree) { int row = 0; while (row < tree.getRowCount()) { tree.expandRow(row); row++; } } public void xmlSetUp(File xmlFile) { try { SAXParserFactory fact = SAXParserFactory.newInstance(); SAXParser parser = fact.newSAXParser(); parser.parse(xmlFile, this); } catch (Exception e) { } } public void createUI() { treeModel = new DefaultTreeModel(base); xmlJTree = new JTree(treeModel); JScrollPane scrollPane = new JScrollPane(xmlJTree); JFrame windows = new JFrame(); windows.setTitle("XML Tree Viewer using SAX Parser in JAVA"); JPanel pnl = new JPanel(); pnl.setLayout(null); JLabel lbl = new JLabel("File :"); txtFile = new JTextField("Selected File Name Here"); JButton btn = new JButton("Select File"); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { JFileChooser fileopen = new JFileChooser(); FileFilter filter = new FileNameExtensionFilter("xml files", "xml"); fileopen.addChoosableFileFilter(filter); int ret = fileopen.showDialog(null, "Open file"); if (ret == JFileChooser.APPROVE_OPTION) { File file = fileopen.getSelectedFile(); txtFile.setText(file.getPath() + File.separator + file.getName()); xmlSetUp(file); } } }); lbl.setBounds(0, 0, 100, 30); txtFile.setBounds(110, 0, 250, 30); btn.setBounds(360, 0, 100, 30); scrollPane.setBounds(0, 50, 500, 600); pnl.add(lbl); pnl.add(txtFile); pnl.add(btn); pnl.add(scrollPane); windows.add(pnl); windows.setSize(500, 700); windows.setVisible(true); windows.setDefaultCloseOperation( windows.EXIT_ON_CLOSE); } }
Leave a Reply