Written one utility class which i believe will useful for others who are looking out for having a tree view of xml file . I have developed the same using swings.  This utility will also provide a drop down and search box which will be useful in searching or finding the selected or entered element /node . In case if the node is found it will highlight those node in tree and will expand only those nodes/element in a tree.

code :-

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
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.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
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 XmlTreeView extends DefaultHandler {

private static final String _ROOT_NODE = “Viewer”;
private static final String _GROUP_NAME = “group”;
private static final String _USECASE_NAME = “usecase”;
private static final String _SCENARIO_NAME = “scenario”;
private static final String _AUTOMATION_TOOL_NAME = “automationtool”;
private static final String _FILTER_LABEL = “Filters :”;
private JTree _jTree;
private DefaultTreeModel _treeModel;
private DefaultMutableTreeNode _base;
private static XmlTreeView _treeViewer;
private JComboBox _automationToolBox;
private HashSet<String> _automationToolSet = new HashSet<String>();
Object selectedTool = null;
private JTextField _searchText;
private JButton _jbutton;

@Override
public void startElement(String uri, String localName, String tagName,
Attributes attr) throws SAXException {
if ((tagName.equals(_GROUP_NAME)) || (tagName.equals(_USECASE_NAME))
|| (tagName.equals(_SCENARIO_NAME))) {
DefaultMutableTreeNode currentAtt = null;
for (int i = 0; i < attr.getLength(); i++) {
if (attr.getLocalName(i)
.equalsIgnoreCase(_AUTOMATION_TOOL_NAME)) {
_automationToolSet.add(attr.getValue(i));
}
currentAtt = new DefaultMutableTreeNode(attr.getValue(i) + ” [”
+ tagName + “]”);
_base.add(currentAtt);
}
_base = currentAtt;
} else {
DefaultMutableTreeNode current = new DefaultMutableTreeNode(tagName);
// current.
_base.add(current);
_base = current;
for (int i = 0; i < attr.getLength(); i++) {
if (attr.getLocalName(i)
.equalsIgnoreCase(_AUTOMATION_TOOL_NAME)) {
_automationToolSet.add(attr.getValue(i));
}
System.out.println(attr.getQName(i));
DefaultMutableTreeNode currentAtt = new DefaultMutableTreeNode(attr.getLocalName(i) + “=” + attr.getValue(i));
_base.add(currentAtt);
}
}

}

@Override
public void startDocument() throws SAXException {
super.startDocument();
_base = new DefaultMutableTreeNode(_ROOT_NODE);
((DefaultTreeModel) _jTree.getModel()).setRoot(_base);
}

@Override
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);

}
}

@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
_base = (DefaultMutableTreeNode) _base.getParent();
}

@Override
public void endDocument() throws SAXException {
// Refresh JTree
((DefaultTreeModel) _jTree.getModel()).reload();
_expandRootNode(_jTree);
}

/**
* Method to start/launch the swing application.
* @param args.
*/

public static void main(String[] args) {
_treeViewer = new XmlTreeView();
_treeViewer.createUI(args);

}

/* private void _expandAll(JTree tree) {
int row = 0;
while (row < tree.getRowCount()) {
tree.expandRow(row);
row++;
}
}*/

private void _colapseAll(JTree tree) {
int row = tree.getRowCount() – 1;
while (row >= 0) {
tree.collapseRow(row);
row–;
}
}

private void _expandRootNode(JTree tree) {
int row = 0;
while (row < 2) {
tree.expandRow(row);
row++;
}
}

private void _xmlSetUp(File xmlFile) {
try {
SAXParserFactory fact = SAXParserFactory.newInstance();
SAXParser parser = fact.newSAXParser();
parser.parse(xmlFile, this);

} catch (Exception e) {

}
}

public void createUI(String[] args) {

//String filePath = args[0];
File file = new File(“D:\\demo\\input_mats.xml”);
_treeModel = new DefaultTreeModel(_base);
_jTree = new JTree(_treeModel);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
javax.swing.ToolTipManager.sharedInstance().registerComponent(_jTree);
} catch (Exception e1) {

}
// — start of components —
_jTree.setCellRenderer(new TreeRender());
JScrollPane scrollPane = new JScrollPane(_jTree);
JLabel lbl = new JLabel(_FILTER_LABEL);
_automationToolBox = new JComboBox();
_searchText = new JTextField();
_jbutton = new JButton(“search”);
JFrame windows = new JFrame();

windows.setTitle(“xml Tree viewer…”);
JPanel pnl = new JPanel();
pnl.setLayout(null);
_xmlSetUp(file);
// create a combo-box dynamically
_automationToolBox.addItem(_AUTOMATION_TOOL_NAME);
for (String x : _automationToolSet) {
_automationToolBox.addItem(x);
}

// Listener for combo-box
_automationToolBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
selectedTool = ((JComboBox) e.getSource()).getSelectedItem();
List<DefaultMutableTreeNode> nodeList = _searchNode(
_AUTOMATION_TOOL_NAME + “=” + selectedTool.toString(),
false);

if (nodeList.size() > 0) {
_colapseAll(_jTree);
TreePath[] paths = new TreePath[nodeList.size()];

for (int i = 0; i < nodeList.size(); i++) {
DefaultMutableTreeNode node = nodeList.get(i);
TreeNode[] nodes = _treeModel.getPathToRoot(node);
TreePath path = new TreePath(nodes);
_jTree.expandPath(path);
paths[i] = path;
}
_jTree.setSelectionPaths(paths);

} else {
System.out.println(“Node with string ” + selectedTool+ ” not found”);
}

}
});

//Listener for Button.
_jbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
List<DefaultMutableTreeNode> nodeList = _searchNode(
_searchText.getText(), true);
if (nodeList.size() > 0) {
_colapseAll(_jTree);
TreePath[] paths = new TreePath[nodeList.size()];

for (int i = 0; i < nodeList.size(); i++) {
DefaultMutableTreeNode node = nodeList.get(i);
TreeNode[] nodes = _treeModel.getPathToRoot(node);
TreePath path = new TreePath(nodes);
_jTree.expandPath(path);
paths[i] = path;
}
_jTree.setSelectionPaths(paths);

} else {
System.out.println(“Node with string ” + selectedTool
+ ” not found”);
}
}
});
// setting the bounds for the component.
lbl.setBounds(5, 10, 100, 30);
_automationToolBox.setBounds(50, 15, 110, 20);
_searchText.setBounds(180, 15, 150, 20);
_jbutton.setBounds(340, 15, 80, 20);
scrollPane.setBounds(0, 50, 500, 600);
// adding a component to panel.
pnl.add(lbl);
pnl.add(_automationToolBox);
pnl.add(_searchText);
pnl.add(_jbutton);
pnl.add(scrollPane);
// adding a panel to window
windows.add(pnl);
windows.setSize(520, 700);
windows.setVisible(true);
windows.setDefaultCloseOperation(windows.EXIT_ON_CLOSE);
}

private List<DefaultMutableTreeNode> _searchNode(String nodeStr, boolean isSearch) {
DefaultMutableTreeNode node = null;
List<DefaultMutableTreeNode> nodeList = new ArrayList<DefaultMutableTreeNode>();
Enumeration e = _base.breadthFirstEnumeration();
while (e.hasMoreElements()) {
node = (DefaultMutableTreeNode) e.nextElement();
if (!isSearch) {
if (nodeStr.equals(node.getUserObject().toString())) {
nodeList.add(node);

}
} else {
if (node.getUserObject().toString().toLowerCase()
.contains(nodeStr.toLowerCase())) {
nodeList.add(node);

}
}
}
return nodeList;
}

}

/**
* Custom Tree renderer class.
*
*/
class TreeRender extends DefaultTreeCellRenderer {

private static final long serialVersionUID = 1L;

public TreeRender() {

}

public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) super
.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
renderer.setToolTipText(value.toString());

if (value.toString().contains(“[group]”)) {
renderer.setForeground(Color.BLUE);
Font font = new Font(“Verdana”, Font.BOLD, 11);
renderer.setFont(font);

} else if (value.toString().contains(“[usecase]”)) {
Color color = new Color(196, 18, 245);
renderer.setForeground(color);
Font font = new Font(“Verdana”, Font.BOLD, 11);
renderer.setFont(font);

} else if (value.toString().contains(“[scenario]”)) {
Color color = new Color(165, 96, 242);
renderer.setForeground(color);
Font font = new Font(“Verdana”, Font.BOLD, 11);
renderer.setFont(font);

} else {
Font font = new Font(“Verdana”, Font.PLAIN, 10);
renderer.setFont(font);
renderer.setForeground(Color.black);
}

return renderer;
}

}

njoy !