634 - JAXP - XML文章にXSLTスタイルシートを適用する。Advertisementソースコード
GuiXSLT.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import javax.swing.JButton;
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.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class GuiXSLT {
public static void main(String[] args) {
MyFrame mf = new MyFrame("XSLT Transform");
mf.show();
}
}
class MyFrame extends JFrame implements ActionListener{
JTextArea xmlSource; // XML
JTextArea xsltSource; // XSLT
JTextArea resultString; // 変換結果
JButton transButton; // 変換ボタン
JFileChooser chooser;
public MyFrame(String str){
super(str);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tab = new JTabbedPane();
xmlSource = new JTextArea();
xsltSource = new JTextArea();
resultString = new JTextArea();
JScrollPane xmlScroll = new JScrollPane(xmlSource);
JScrollPane xsltScroll = new JScrollPane(xsltSource);
JScrollPane resultScroll = new JScrollPane(resultString);
transButton = new JButton("Transform");
transButton.addActionListener(this);
tab.add(xmlScroll, "XML");
tab.add(xsltScroll, "XSLT");
tab.add(resultScroll, "Result");
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(tab, "Center");
this.getContentPane().add(transButton, "South");
this.setJMenuBar(createMenuBar());
this.setSize(new Dimension(400, 400));
chooser = new JFileChooser();
// chooser.addChoosableFileFilter(new XsltFileFilter());
// chooser.addChoosableFileFilter(new XmlFileFilter());
}
public JMenuBar createMenuBar(){
JMenuBar menuBar = new JMenuBar();
// ファイルメニュー
JMenu file = new JMenu("ファイル");
JMenu open = new JMenu("開く");
open.add(createMenuItem("XML", "openXML", this));
open.add(createMenuItem("XSLT", "openXSLT", this));
file.add(open);
JMenu save = new JMenu("保存");
save.add(createMenuItem("XML", "saveXML", this));
save.add(createMenuItem("XSLT", "saveXSLT", this));
save.add(createMenuItem("結果", "saveResult", this));
file.add(save);
file.add(new JSeparator());
file.add(createMenuItem("終了", "quit", this));
menuBar.add(file);
// ヘルプ
JMenu help = new JMenu("ヘルプ");
help.add(createMenuItem("バージョン情報", "version", this));
menuBar.add(help);
return menuBar;
}
public JMenuItem createMenuItem(String title, String cmd, ActionListener act){
JMenuItem item = new JMenuItem(title);
item.setActionCommand(cmd);
item.addActionListener(act);
return item;
}
public void actionPerformed(ActionEvent ae){
// 変換
if(ae.getActionCommand() == "Transform"){
try{
StreamSource xml = new StreamSource(new StringReader(xmlSource.getText()));
StreamSource xslt = new StreamSource(new StringReader(xsltSource.getText()));
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
TransformerFactory trFactory = TransformerFactory.newInstance();
Transformer transformer = trFactory.newTransformer(xslt);
transformer.transform(xml, result);
resultString.setText(sw.toString());
}catch(Exception e){
resultString.setText(e.getMessage());
}
}
// XMLファイルを開く
if(ae.getActionCommand() == "openXML"){
try{
int returnVal;
if((returnVal = chooser.showOpenDialog(this)) ==
JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
xmlSource.read(br, null);
br.close();
}
}catch(IOException e){
System.err.println(e);
}
}
// XSLTファイルを開く
if(ae.getActionCommand() == "openXSLT"){
try{
int returnVal;
if((returnVal = chooser.showOpenDialog(this)) ==
JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
xsltSource.read(br, null);
br.close();
}
}catch(IOException e){
System.err.println(e);
}
}
// XMLファイルの保存
if(ae.getActionCommand() == "saveXML"){
StringWriter sw = new StringWriter();
try{
int returnVal = chooser.showSaveDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(xmlSource.getText());
bw.flush();
bw.close();
}
}catch(IOException e){
System.err.println(e.getMessage());
}
}
// XSLTファイルの保存
if(ae.getActionCommand() == "saveXSLT"){
StringWriter sw = new StringWriter();
try{
int returnVal = chooser.showSaveDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(xsltSource.getText());
bw.flush();
bw.close();
}
}catch(IOException e){
System.err.println(e.getMessage());
}
}
// 結果ファイルの保存
if(ae.getActionCommand() == "saveResult"){
StringWriter sw = new StringWriter();
try{
int returnVal = chooser.showSaveDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(resultString.getText());
bw.flush();
bw.close();
}
}catch(IOException e){
System.err.println(e.getMessage());
}
}
// バージョン情報
if(ae.getActionCommand() == "version"){
JOptionPane.showMessageDialog(getContentPane(), "XSLT Stylesheet ver.1.0");
}
// 終了
if(ae.getActionCommand() == "quit"){
System.exit(0);
}
}
}
実行結果 ![]()
|