Guest User

SaxParse

a guest
Jul 14th, 2012
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. package main;
  2.  
  3. import java.io.File;
  4.  
  5. import javax.swing.JFrame;
  6. import javax.swing.JScrollPane;
  7. import javax.swing.JTree;
  8. import javax.swing.tree.DefaultMutableTreeNode;
  9. import javax.swing.tree.DefaultTreeModel;
  10. import javax.swing.tree.TreeModel;
  11. import javax.xml.parsers.SAXParser;
  12. import javax.xml.parsers.SAXParserFactory;
  13.  
  14. import org.xml.sax.Attributes;
  15. import org.xml.sax.SAXException;
  16. import org.xml.sax.helpers.DefaultHandler;
  17.  
  18. public class mainWindow {
  19.  
  20. public TreeModel parse(String filename) {
  21. SAXParserFactory factory = SAXParserFactory.newInstance();
  22. XMLTreeHandler handler = new XMLTreeHandler();
  23. try {
  24. // Parse the input.
  25. SAXParser saxParser = factory.newSAXParser();
  26. saxParser.parse(new File(filename), handler);
  27. } catch (Exception e) {
  28. System.err.println("File Read Error: " + e);
  29. e.printStackTrace();
  30. return new DefaultTreeModel(new DefaultMutableTreeNode("error"));
  31. }
  32. return new DefaultTreeModel(handler.getRoot());
  33. }
  34.  
  35. public static class XMLTreeHandler extends DefaultHandler {
  36. private DefaultMutableTreeNode root, currentNode;
  37.  
  38. public DefaultMutableTreeNode getRoot() {
  39. return root;
  40. }
  41.  
  42. // SAX Parser Handler methods...
  43. public void startElement(String namespaceURI, String lName,
  44. String qName, Attributes attrs) throws SAXException {
  45. String eName = lName; // Element name
  46. if ("".equals(eName))
  47. eName = qName;
  48. Tag t = new Tag(eName, attrs);
  49. DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(t);
  50. if (currentNode == null) {
  51. root = newNode;
  52. } else {
  53. // Must not be the root node...
  54. currentNode.add(newNode);
  55. }
  56. currentNode = newNode;
  57. }
  58.  
  59. public void endElement(String namespaceURI, String sName, String qName)
  60. throws SAXException {
  61. currentNode = (DefaultMutableTreeNode) currentNode.getParent();
  62. }
  63.  
  64. public void characters(char buf[], int offset, int len)
  65. throws SAXException {
  66. String s = new String(buf, offset, len).trim();
  67. ((Tag) currentNode.getUserObject()).addData(s);
  68. }
  69. }
  70.  
  71. public static class Tag {
  72. private String name;
  73.  
  74. private String data;
  75.  
  76. private Attributes attr;
  77.  
  78. public Tag(String n, Attributes a) {
  79. name = n;
  80. attr = a;
  81. }
  82.  
  83. public String getName() {
  84. return name;
  85. }
  86.  
  87. public Attributes getAttributes() {
  88. return attr;
  89. }
  90.  
  91. public void setData(String d) {
  92. data = d;
  93. }
  94.  
  95. public String getData() {
  96. return data;
  97. }
  98.  
  99. public void addData(String d) {
  100. if (data == null) {
  101. setData(d);
  102. } else {
  103. data += d;
  104. }
  105. }
  106.  
  107. public String toString() {
  108. String buf = "";
  109. for (int i = 0; i < attr.getLength(); i++) {
  110. buf += (attr.getQName(i));
  111. buf += ("=\"");
  112. buf += (attr.getValue(i));
  113. buf += ("\" ");
  114. }
  115. String a = buf;
  116. return name + ": " + a + (data == null ? "" : " (" + data + ")");
  117. }
  118. }
  119.  
  120. public static void main(String args[]) {
  121. JFrame frame = new JFrame("VSX Test");
  122. mainWindow parser = new mainWindow();
  123. JTree tree = new JTree(parser.parse("build.xml"));
  124. frame.getContentPane().add(new JScrollPane(tree));
  125. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  126. frame.setSize(300, 400);
  127. frame.setVisible(true);
  128. }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment