@634

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);
        }
    }
}

実行結果
実行結果
  1. XML ファイル作成(or 読み込み)
  2. XSLT ファイル作成(or 読み込み)
  3. Transform ボタンを押す。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール