⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 domtree.09

📁 java操作xml文件的各种代码
💻 09
字号:
import java.awt.*;import javax.swing.*;import javax.swing.tree.TreePath;import javax.swing.event.TreeModelListener;import javax.swing.tree.TreeModel;import javax.swing.tree.TreeCellRenderer;import org.w3c.dom.Document;import org.w3c.dom.DocumentType;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.ProcessingInstruction;//加载xerces的DOM分析器import org.apache.xerces.parsers.DOMParser;/** * <CODE>DOMTreeView</CODE>会读入一个XML文件, * 使用DOM分析器分析后,将它显示到一个Java的JTree里。 * * @author <a href="mailto:james@eknow.com.tw">王景浩</a> * @version 0.9 */public class DOMTreeView extends JFrame{  public JTree tree;  /**   * 设置窗口的初始值   */  public void display(){    try {      //将tree加到窗口里,同时设置在窗口的中间。      this.getContentPane().add(tree, BorderLayout.CENTER);      //设置窗口大小      this.setSize(new Dimension(400, 300));      //显示窗口      this.show();    }    catch(Exception e) {      e.printStackTrace();    }  }  /**   *   设置窗口关闭的事件   */  protected void processWindowEvent(java.awt.event.WindowEvent e) {    super.processWindowEvent(e);    if (e.getID() == java.awt.event.WindowEvent.WINDOW_CLOSING) {      System.exit(0);    }  }  public void parse(String uri){    //建立一个 DOM 分析器    DOMParser parser = new DOMParser();    try{      //显示标题      this.setTitle("目前文件: " + uri);      parser.setFeature(        "http://xml.org/sax/features/validation",        true);      parser.setFeature(        "http://apache.org/xml/features/dom/include-ignorable-whitespace",        false);      parser.parse(uri);      Document doc = parser.getDocument();      //建立使用MyTreeModel的tree      tree = new JTree(new MyTreeModel(doc));      //将tree的CellRenderer设置为MyTreeCellRenderer      tree.setCellRenderer(new MyTreeCellRenderer());    } catch (Exception e){      System.err.println("分析错误: " + e.getMessage());    }  }  public static void main(String[] args) {    if( args.length != 1) {      System.out.println("使用方法: java DOMTreeView [XML文件名称]");      return;    }    String uri = args[0];    DOMTreeView dtv = new DOMTreeView();    dtv.parse(uri);    dtv.display();  }}class MyTreeModel implements TreeModel {  private Document root;  public MyTreeModel(Document doc){    root = doc;  }  public Object getRoot() {    return root;  }  public Object getChild(Object parent, int index) {    return ((Node)parent).getChildNodes().item(index);  }  public int getChildCount(Object parent) {    return ((Node)parent).getChildNodes().getLength();  }  public boolean isLeaf(Object node) {    return ((Node)node).getChildNodes().getLength() == 0;  }  public void valueForPathChanged(TreePath path, Object newValue) {  }  public int getIndexOfChild(Object parent, Object child) {    NodeList nl = ((Node)parent).getChildNodes();    for(int i=0; i< nl.getLength(); i++)      if( ((Node)child).equals(nl.item(i)) )        return i;    return -1;  }  public void addTreeModelListener(TreeModelListener l) {  }  public void removeTreeModelListener(TreeModelListener l) {  }}class MyTreeCellRenderer extends JLabel implements TreeCellRenderer{  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {    Node node = (Node)value;    switch( node.getNodeType() ){      case Node.CDATA_SECTION_NODE:      case Node.COMMENT_NODE:      case Node.TEXT_NODE:        this.setText( node.getNodeName() + " \"" +                      node.getNodeValue() + "\"  " );        break;      case Node.ELEMENT_NODE:        NamedNodeMap nodeMap = node.getAttributes();        StringBuffer strElement = new StringBuffer();        strElement.append( "<" + node.getNodeName() );        for(int i=0; i< nodeMap.getLength(); i++)          strElement.append(" " + nodeMap.item(i).getNodeName() +                            "=\"" + nodeMap.item(i).getNodeValue() + "\"");        this.setText(strElement.toString());        break;      case Node.DOCUMENT_NODE:        this.setText( node.getNodeName() );        break;      case Node.DOCUMENT_TYPE_NODE:        DocumentType dt = (DocumentType)node;        this.setText( dt.getName() + " " +                      "System ID: " + dt.getSystemId() + ", " +                      "Public ID: " + dt.getPublicId() + "  "                      );        break;      case Node.PROCESSING_INSTRUCTION_NODE:        ProcessingInstruction pi = (ProcessingInstruction)node;        this.setText( "Target=(" + pi.getTarget() + "), " +                      "Data=(" + pi.getData() + ")"        );        break;      case Node.ENTITY_REFERENCE_NODE:        this.setText( "&" + node.getNodeName() + ";");        break;      default:        this.setText( node.getNodeType() + " <" +                      node.getNodeName() + "> \"" +                      node.getNodeValue() + "\"  " );    }    return this;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -