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

📄 xpathframe.java

📁 Java2核心教程的源码 从网上下载的 完整的
💻 JAVA
字号:
package 十二.src;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
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.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XPathFrame extends JFrame {

	public XPathFrame(){
		setTitle("XPathTest");
		
		JMenu fileMenu = new JMenu("File");// 添加了菜单按钮
		
		//JMenuItem 实现了 JMenu 这个接口
		JMenuItem openItem = new JMenuItem("open");
		openItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){openFile();}});
		fileMenu.add(openItem);
		
//		JMenu editMenu = new JMenu("Edit");
//		JMenuItem closeItem = new JMenuItem("close");
//		closeItem.addActionListener(new ActionListener(){public void actionPerformed1{ActionEvent event1}{closeFile();}});
//		editMenu.add(closeItem);
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.add(fileMenu);
		setJMenuBar(menuBar);
		
//		ActionListener listener1 = new ActionListener(){
//			public void actionPerformed1(ActionEvent event1){ System.out.println("实现actionPerformed");}};

		ActionListener listener = new ActionListener(){
			public void actionPerformed(ActionEvent event){ evaluate();}};
			expression = new JTextField(28);
			expression.addActionListener(listener);
			JButton evaluateButton = new JButton("Evaluate");
			evaluateButton.addActionListener(listener);
			
			typeCombo = new JComboBox(new Object[]{"STRING","NODE","NODESET","NUMBER","BOOLEAN"});
			//设置默认的显示
			typeCombo.setSelectedItem("NODE");
			
			JPanel panel = new JPanel();
			panel.add(expression);
			panel.add(typeCombo);
			panel.add(evaluateButton);
			docText = new JTextArea(15,50);
			result = new JTextField();
			result.setBorder(new TitledBorder("Result"));
			
			add(panel,BorderLayout.NORTH);
			add(new JScrollPane(docText),BorderLayout.CENTER);
			add(result,BorderLayout.SOUTH);
			
			try{
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				builder = factory.newDocumentBuilder();
				}
			catch(ParserConfigurationException e){
				JOptionPane.showMessageDialog(this,e);
			}
			
			XPathFactory xpfactory = XPathFactory.newInstance();
			path = xpfactory.newXPath();
			pack();
	}

	public void openFile() {
		JFileChooser chooser = new JFileChooser();
		chooser.setCurrentDirectory(new File("."));

		chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
			public boolean accept(File f) {
				return f.isDirectory()
						|| f.getName().toLowerCase().endsWith(".xml");
			}

			public String getDescription() {
				return "XML files";
			}
		});
		int r = chooser.showOpenDialog(this);
		if (r != JFileChooser.APPROVE_OPTION)
			return;
		File f = chooser.getSelectedFile();
		System.out.println(f.length());//返回文件的大小;这个值具体是什么不太清楚,与文件,右键/大小一致
		try {
			byte[] bytes = new byte[(int) f.length()];
			//FileInputStream将文件f的内容存储到字节数组bytes中
			//将控制符当成字节来对待,一同存储
			new FileInputStream(f).read(bytes);
			//通过bytes来生成字符串,字符串中包含控制符
			//当显示在Text中时,控制符起作用(这也就是我们所看到的整齐的输入)
			docText.setText(new String(bytes));
			doc = builder.parse(f);
		} catch (IOException e) {
			JOptionPane.showMessageDialog(this, e);
		} catch (SAXException e) {
			JOptionPane.showMessageDialog(this, e);
		}
	}

	public void closeFile() {
		System.out.println("测试关闭文件");
	}

	public void evaluate() {
		try {
			String typeName = (String) typeCombo.getSelectedItem();
			QName returnType = (QName) XPathConstants.class.getField(typeName)
					.get(null);
			//expression.getText();就是字符串类型。学习的时候应该灵活学习。灵活的使用
			Object evalResult = path.evaluate(expression.getText(), doc,
					returnType);
			if (typeName.equals("NODESET")) {
				NodeList list = (NodeList) evalResult;
				//StringBuilder的使用,见文档
				StringBuilder builder = new StringBuilder();
				builder.append("{");
				for (int i = 0; i < list.getLength(); i++) {
					if (i > 0)
						builder.append(",");
					builder.append("" + list.item(i));
				}
				builder.append("}");
				result.setText("" + builder);
			} else
				result.setText("" + evalResult);
		} catch (XPathExpressionException e) {
			result.setText("" + e);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private DocumentBuilder builder;

	private Document doc;

	private XPath path;

	private JTextField expression;

	private JTextField result;

	private JTextArea docText;

	private JComboBox typeCombo;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

⌨️ 快捷键说明

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