diff --git a/mt.xml b/mt.xml index 48922cc..ac63755 100644 --- a/mt.xml +++ b/mt.xml @@ -1,3 +1,4 @@ + 0 @@ -13,4 +14,4 @@ 1 R - \ No newline at end of file + diff --git a/mtbase.dtd b/mtbase.dtd new file mode 100644 index 0000000..357ec32 --- /dev/null +++ b/mtbase.dtd @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/mt/LeerXML.java b/src/mt/LeerXML.java index d9c245c..e3f2fcd 100644 --- a/src/mt/LeerXML.java +++ b/src/mt/LeerXML.java @@ -7,10 +7,16 @@ package mt; -import java.io.File; +import java.io.*; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; +import javax.xml.stream.util.StreamReaderDelegate; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import jdk.internal.org.xml.sax.ErrorHandler; import jdk.internal.org.xml.sax.SAXException; import jdk.internal.org.xml.sax.SAXParseException; @@ -18,7 +24,7 @@ import jdk.internal.org.xml.sax.SAXParseException; import org.w3c.dom.Document; /** - * Esta clase puede abrir y validar un archivo de xml. + * Esta clase puede abrir y validar un archivo de xml. Se necesita un archivo mtbase.dtd */ class LeerXML { @@ -26,9 +32,26 @@ class LeerXML { * El metodo va a verificar que el archivo existe y que contiene xml valido. Si es valido devuelve el documento. * * @param archivo Es el archivo a abrir. - * @return Devuelve un document de xml o null si habia algun error. + * @return Devuelve un document de xml o null si hay algun error. */ - Document leerArchivo(File archivo) { + public Document leerArchivo(File archivo) { + if(!archivo.exists() || !archivo.getName().endsWith(".xml")){ + System.out.println("Archivo "+archivo.getName()+" no existe o no es compatible"); + return null; + } + Document dc = createDocument(archivo); + if(dc == null) return validarXML(archivo); + return dc; + } + + /** + * + * @param archivo Es el archivo Xml + * @return Retorna un document del xml o null si hay algun error. + */ + + private Document createDocument(File archivo){ + Document document; try { if (!archivo.exists()) { System.out.println("El archivo " + archivo.getName() + " no existe!"); @@ -36,16 +59,21 @@ class LeerXML { } DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setValidating(false); + dbf.setValidating(true); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); - db.setErrorHandler(new SimpleErrorHandler()); - Document document = db.parse(archivo); + SimpleErrorHandler seh = new SimpleErrorHandler(); + db.setErrorHandler(seh); + document = db.parse(archivo); + if(seh.error) return null; document.getDocumentElement().normalize(); return document; } catch(Exception e) { + if(e.getMessage().indexOf(".dtd") >= 0) { + return validarXML(archivo); + } System.out.println(e.getMessage()); e.printStackTrace(); return null; @@ -53,10 +81,48 @@ class LeerXML { } /** - * Esta clase se usa para validar que el xml es valido. + * + * @param original es el archivo original del xml + * @return Retorna un document de un xml arreglado, null si el xml no es coherente a lo que se pide + */ + private Document validarXML(File original){ + File temp = fixXML(original); + Document document = createDocument(temp); + temp.delete(); + if(document != null) return document; + return null; + } + + /** + * + * @param original Es el archivo xml sin cambios + * @return un file de xml adaptado para ser validado + */ + private File fixXML(File original){ + String aux = ""; + File temp; + try{ + temp = new File("temp.xml"); + BufferedReader br = new BufferedReader(new FileReader(original)); + BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); + if((aux = br.readLine()).startsWith(""); + }else{ + bw.write("\n"+aux); + } + for(aux = "";aux != null;aux = br.readLine()){ + if(!aux.startsWith(" y definidos correctamente +mT1.xml : No definidos y , pero las transiciones con correctas +mT2.xml : definido, pero es un archivo distinto +mT3.xml : definido, pero no lo esta +mT4.xml : y definidos correctamente, pero las transiciones estan errados +mtbase.dtd : Base para validar xml diff --git a/xmltest/mT.xml b/xmltest/mT.xml new file mode 100644 index 0000000..9239d85 --- /dev/null +++ b/xmltest/mT.xml @@ -0,0 +1,18 @@ + + + + + 0 + 0 + 0 + 0 + R + + + 0 + 1 + 1 + 1 + R + + diff --git a/xmltest/mT1.xml b/xmltest/mT1.xml new file mode 100644 index 0000000..c6beebc --- /dev/null +++ b/xmltest/mT1.xml @@ -0,0 +1,16 @@ + + + 0 + 0 + 0 + 0 + R + + + 0 + 1 + 1 + 1 + R + + diff --git a/xmltest/mT2.xml b/xmltest/mT2.xml new file mode 100644 index 0000000..3c8caa1 --- /dev/null +++ b/xmltest/mT2.xml @@ -0,0 +1,18 @@ + + + + + 0 + 0 + 0 + 0 + R + + + 0 + 1 + 1 + 1 + R + + diff --git a/xmltest/mT3.xml b/xmltest/mT3.xml new file mode 100644 index 0000000..ac63755 --- /dev/null +++ b/xmltest/mT3.xml @@ -0,0 +1,17 @@ + + + + 0 + 0 + 0 + 0 + R + + + 0 + 1 + 1 + 1 + R + + diff --git a/xmltest/mT4.xml b/xmltest/mT4.xml new file mode 100644 index 0000000..aa4d925 --- /dev/null +++ b/xmltest/mT4.xml @@ -0,0 +1,16 @@ + + + + + 0 + 0 + 0 + R + + + 0 + 1 + 1 + R + + diff --git a/xmltest/mtbase.dtd b/xmltest/mtbase.dtd new file mode 100644 index 0000000..357ec32 --- /dev/null +++ b/xmltest/mtbase.dtd @@ -0,0 +1,7 @@ + + + + + + +