|
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*; // Exception
// Opendialog
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.*;
//import java.util.Hashtable; // Filter
//import java.util.Enumeration; // Filter
// InternalFrame
import javax.swing.event.*;
import javax.xml.XMLConstants;
import javax.xml.parsers.*;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class ReadXML extends JFrame {
// Menü Variablen
private JButton bnOpen = new JButton("Oeffnen");
private JButton bnValidate = new JButton("Validate?");
private JButton bnParsing = new JButton("Parsing");
private JTextArea editorXML = new JTextArea();
private JTextArea editorParsing = new JTextArea();
private String filenameXML="";
private String filenameXSD="";
// Konstruktor
public ReadXML() {
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setGUI();
}
public void setGUI() {
this.getContentPane().setLayout( new BorderLayout() );
this.setSize(new Dimension(600, 400));
JTabbedPane jTabbedPane1 = new JTabbedPane();
jTabbedPane1.setFont( new Font("Arial", Font.BOLD,16));
editorXML = new JTextArea("abc\ndef");
editorXML.setFont(new Font("Arial", Font.BOLD, 18));
editorParsing = new JTextArea();
editorParsing.setFont(new Font("Arial", Font.BOLD, 18));
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,false,
new JScrollPane(editorXML), new JScrollPane(editorParsing) );
this.getContentPane().add( split, BorderLayout.CENTER );
split.setDividerLocation(350);
add(split , BorderLayout.CENTER);
setButtons();
} // setGUI
// setzt die Menüs
private void setButtons() {
JPanel panel = new JPanel();
panel.add(bnOpen);
panel.add(bnValidate);
panel.add(bnParsing);
bnOpen.setFont(new Font("Arial", Font.BOLD, 18));
bnValidate.setFont(new Font("Arial", Font.BOLD, 18));
bnParsing.setFont(new Font("Arial", Font.BOLD, 18));
add(panel , BorderLayout.NORTH);
bnOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bnOpen_click();
}
});
bnValidate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bnValidate_click();
}
});
bnParsing.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bnParsing_click();
}
});
bnValidate.setEnabled(false);
bnParsing.setEnabled(false);
} // setButtons
// * @see #getFileExt Ändern der Dateierweiterung .TXT -> .DAT
public String changeFileExt(String sFileName, String sExt) {
String sErgFile;
int k;
sErgFile = "";
File f = null;
//File.pa
try {
// eventuell kann auch f.pathSeparatorChar verwendet werden
// suche letzten Punkt
k = sFileName.lastIndexOf(".");
if (k == -1){ // kein Punkt vorhanden
return new String(sFileName+sExt);
}
else {
int n = sFileName.length();
// beginIndex EndIndex
sErgFile = sFileName.substring(0,k); // zählt von 0
return new String( sErgFile+sExt);
}
}
catch (Exception e) {
}
return sErgFile;
} // ChangeFilenameExt
public boolean FileExists(String sFileName) {
File f = null;
try {
// evnetuell kann auch f.pathSeparatorChar verwendet werden
f = new File(sFileName);
if (f.exists())
return true;
else
return false;
}
catch (Exception e) {
return false;
}
} // FileExists
void bnOpen_click() {
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setMultiSelectionEnabled(false);
//jFileChooser1.setCurrentDirectory( new File("C:\\DATEN") );
jFileChooser.setCurrentDirectory(new File( (String) System.getProperties().get("user.dir")) );
if (JFileChooser.APPROVE_OPTION == jFileChooser.showOpenDialog(this)) {
readFile(jFileChooser.getSelectedFile().getPath());
bnParsing.setEnabled(true);
if (FileExists(filenameXSD) ) {
bnValidate.setEnabled(true);
}
}
} // MnOpen
private void readFile(String filename) {
FileInputStream fin;
InputStreamReader iin;
LineNumberReader din;
String sLine;
StringBuilder sb = new StringBuilder();
filenameXML = filename;
filenameXSD = changeFileExt(filename,".xsd");
try {
fin = new FileInputStream(filename);
iin = new InputStreamReader(fin);
din = new LineNumberReader(iin); // oder BufferedReader br = new BufferedReader(ir);
while ( din.ready() ) {
sLine = din.readLine();
sb.append(sLine);
sb.append("\n");
editorXML.setText(sb.toString());
}
}
catch (FileNotFoundException e1) {
System.err.println("Datei war nicht vorhanden!");
}
catch (IOException ee) {
System.err.println("IOException: " + ee);
}
}
private boolean bnValidate_click() {
try {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(filenameXSD));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(filenameXML)));
} catch (IOException | SAXException e) {
System.out.println("Exception: "+e.getMessage());
editorParsing.setText( "XML-Datei ist NICHT valide\n\n" ) ;
editorParsing.append("Fehler:\n"+e.getMessage());
return false;
}
editorParsing.setText( "XML-Datei ist valide" ) ;
return true;
}
public String getInput( String sTitle, String sMessage) {
return JOptionPane.showInputDialog(null, sMessage, sTitle , 1);
} // getInput
private void bnParsing_click() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( new File(filenameXML) );
String node1 = getInput("Traversieren","SearchTag");
if (node1.length()==0) return;
String node2 = getInput("Traversieren","ElementTag");
if (node2.length()==0) return;
NodeList nodelist = document.getElementsByTagName(node1);
editorParsing.setText( "" ) ;
for (int i=0; i
|
|