Java核心技术II:解析XML文档
来源:互联网 发布:随机森林优化 编辑:程序博客网 时间:2024/05/17 20:10
程序清单:2-1 DOMTreeTest.java
import java.awt.Component;import java.awt.EventQueue;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.print.Doc;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTree;import javax.swing.SwingWorker;import javax.swing.event.TreeModelListener;import javax.swing.filechooser.FileFilter;import javax.swing.table.AbstractTableModel;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.TreeCellRenderer;import javax.swing.tree.TreeModel;import javax.swing.tree.TreePath;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.eclipse.jdt.internal.compiler.lookup.InvocationSite.EmptyWithAstNode;import org.omg.CORBA.PUBLIC_MEMBER;import org.w3c.dom.CDATASection;import org.w3c.dom.CharacterData;import org.w3c.dom.Comment;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Text;/** * *//** * @author Administrator *新浪微博:ouc大飞 */public class DOMTreeTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub EventQueue.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub JFrame frame=new DOMTreeFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); }}class DOMTreeFrame extends JFrame{ /** * */ public DOMTreeFrame(){ setTitle("DOMTreeTest"); setSize(DEFAULT_HIGHT, DEFAULT_WIDTH); JMenu fileMenu=new JMenu("file"); JMenuItem openitem=new JMenuItem("Open"); openitem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub openFile(); } }); fileMenu.add(openitem); JMenuItem exitItem=new JMenuItem("exit"); exitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.exit(0); } }); fileMenu.add(exitItem); JMenuBar bar=new JMenuBar(); bar.add(fileMenu); setJMenuBar(bar); } public void openFile(){ JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new FileFilter() { @Override public String getDescription() { // TODO Auto-generated method stub return "XML files"; } @Override public boolean accept(File f) { // TODO Auto-generated method stub return f.isDirectory()||f.getName().toLowerCase().endsWith(".xml"); } }); int r=chooser.showOpenDialog(this); if (r!=JFileChooser.APPROVE_OPTION) { return; } final File file=chooser.getSelectedFile(); new SwingWorker<Document, Void>() { @Override protected Document doInBackground() throws Exception { // TODO Auto-generated method stub if(builder==null) { DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); builder=factory.newDocumentBuilder(); } return builder.parse(file); } protected void done(){ try { Document doc=get(); JTree tree=new JTree(new DOMTreeModel(doc)); tree.setCellRenderer(new DOMTreeCellRenderer()); setContentPane(new JScrollPane(tree)); validate(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }.execute(); } private DocumentBuilder builder; private static final int DEFAULT_WIDTH=400; private static final int DEFAULT_HIGHT=400;}class DOMTreeModel implements TreeModel{ public DOMTreeModel(Document doc){ this.doc=doc; } @Override public Object getRoot() { return doc.getDocumentElement(); // TODO Auto-generated method stub } @Override public Object getChild(Object parent, int index) { // TODO Auto-generated method stub Node node=(Node)parent; NodeList list=node.getChildNodes(); return list.item(index); } @Override public int getChildCount(Object parent) { // TODO Auto-generated method stub Node node=(Node)parent; NodeList list=node.getChildNodes(); return list.getLength(); } @Override public boolean isLeaf(Object node) { // TODO Auto-generated method stub return getChildCount(node)==0; } @Override public void valueForPathChanged(TreePath path, Object newValue) { // TODO Auto-generated method stub } @Override public int getIndexOfChild(Object parent, Object child) { // TODO Auto-generated method stub Node node=(Node)parent; NodeList list=node.getChildNodes(); for(int i=0;i<list.getLength();i++) if(getChild(node, i)==child) return i; return -1; } @Override public void addTreeModelListener(TreeModelListener l) { // TODO Auto-generated method stub } @Override public void removeTreeModelListener(TreeModelListener l) { // TODO Auto-generated method stub } private Document doc;}class DOMTreeCellRenderer extends DefaultTreeCellRenderer{ public Component getTreeCellRenderComponent(JTree jTree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus ){ Node node=(Node)value; if (node instanceof Element) return elementPanel((Element) node); super.getTreeCellRendererComponent(jTree, value, selected, expanded, leaf, row, hasFocus); if (node instanceof CharacterData) { setText(characterString((CharacterData)node)); }else setText(node.getClass()+": "+node.toString()); return this; } public static JPanel elementPanel(Element e){ JPanel jPanel=new JPanel(); jPanel.add(new JLabel("element:"+e.getTagName()) ); final NamedNodeMap map=e.getAttributes(); jPanel.add(new JTable(new AbstractTableModel(){ @Override public int getRowCount() { // TODO Auto-generated method stub return map.getLength(); } @Override public int getColumnCount() { // TODO Auto-generated method stub return 2; } @Override public Object getValueAt(int r, int c) { // TODO Auto-generated method stub return c==0?map.item(r):map.item(r).getNodeValue(); } })); return jPanel; } public static String characterString(CharacterData node){ StringBuilder builder =new StringBuilder(node.getData()); for(int i=0;i<builder.length();i++){ if(builder.charAt(i)=='\r'){ builder.replace(i, i+1, "\\r"); i++; } else if (builder.charAt(i)=='\n') { builder.replace(i, i+1, "\\n"); i++; } else if (builder.charAt(i)=='\t') { builder.replace(i, i+1, "\\t"); i++; } } if (node instanceof CDATASection) { builder.insert(0, "CDATASection:"); }else if (node instanceof Text) { builder.insert(0, "Text:"); } else if (node instanceof Comment) { builder.insert(0, "Comment:"); } return builder.toString(); }}
0 0
- Java核心技术II:解析XML文档
- Java核心技术II:ZiP压缩文档
- Java解析XML文档
- JAVA 解析XML文档
- java解析xml文档
- Java解析XML文档
- java解析xml文档
- Java解析XML文档
- java解析xml文档
- ajax的核心技术应用--javascript 解析xml文档,提取xml文档中的数据
- java sax解析xml文档
- java sax解析xml文档
- 纯java解析xml文档
- java dom解析XML文档
- 解析XML文档(java)
- 使用Java解析XML文档
- JAVA DOM4j解析XML文档
- Java解析XML文档--SAX
- ionic2/ionic3 启动慢问题解决(apk包也变小了)
- CodeForces
- docker数据卷
- Android Matrix的使用过程
- BootStrap基础入门
- Java核心技术II:解析XML文档
- SSM第一次握手
- Java开发注意事项
- Platform Cable USB 的驱动重新安装方法
- 屏蔽掉不能缩放界面-支持ie-chrome
- scala 关于正则匹配器的取值问题
- Tomcat的安装配置与JavaWeb入门教程
- Windows 8.1 use VisionApp RDP to some server issue
- 【JDK动态代理】