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 @@
+
+
+
+
+
+
+