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