Implementados metodos para validar la integridad de un xml valido para el proyecto. Tambien agregados xmls de prueba
This commit is contained in:
parent
18c824ff6b
commit
fb09ee568a
1
mt.xml
1
mt.xml
@ -1,3 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<root>
|
<root>
|
||||||
<transicion>
|
<transicion>
|
||||||
<qi>0</qi>
|
<qi>0</qi>
|
||||||
|
7
mtbase.dtd
Normal file
7
mtbase.dtd
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<!ELEMENT root (transicion+)>
|
||||||
|
<!ELEMENT transicion (qi,si,qj,sj,movimiento)>
|
||||||
|
<!ELEMENT qi (#PCDATA)>
|
||||||
|
<!ELEMENT si (#PCDATA)>
|
||||||
|
<!ELEMENT qj (#PCDATA)>
|
||||||
|
<!ELEMENT sj (#PCDATA)>
|
||||||
|
<!ELEMENT movimiento (#PCDATA)>
|
@ -7,10 +7,16 @@
|
|||||||
|
|
||||||
package mt;
|
package mt;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.*;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
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.ErrorHandler;
|
||||||
import jdk.internal.org.xml.sax.SAXException;
|
import jdk.internal.org.xml.sax.SAXException;
|
||||||
import jdk.internal.org.xml.sax.SAXParseException;
|
import jdk.internal.org.xml.sax.SAXParseException;
|
||||||
@ -18,7 +24,7 @@ import jdk.internal.org.xml.sax.SAXParseException;
|
|||||||
import org.w3c.dom.Document;
|
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 {
|
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.
|
* 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.
|
* @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 {
|
try {
|
||||||
if (!archivo.exists()) {
|
if (!archivo.exists()) {
|
||||||
System.out.println("El archivo " + archivo.getName() + " no existe!");
|
System.out.println("El archivo " + archivo.getName() + " no existe!");
|
||||||
@ -36,16 +59,21 @@ class LeerXML {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||||
dbf.setValidating(false);
|
dbf.setValidating(true);
|
||||||
dbf.setNamespaceAware(true);
|
dbf.setNamespaceAware(true);
|
||||||
|
|
||||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||||
db.setErrorHandler(new SimpleErrorHandler());
|
SimpleErrorHandler seh = new SimpleErrorHandler();
|
||||||
Document document = db.parse(archivo);
|
db.setErrorHandler(seh);
|
||||||
|
document = db.parse(archivo);
|
||||||
|
if(seh.error) return null;
|
||||||
document.getDocumentElement().normalize();
|
document.getDocumentElement().normalize();
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
catch(Exception e) {
|
catch(Exception e) {
|
||||||
|
if(e.getMessage().indexOf(".dtd") >= 0) {
|
||||||
|
return validarXML(archivo);
|
||||||
|
}
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
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("<?xml")){
|
||||||
|
bw.write(aux+"\n<!DOCTYPE root SYSTEM \"mtbase.dtd\">");
|
||||||
|
}else{
|
||||||
|
bw.write("<!DOCTYPE root SYSTEM \"mtbase.dtd\">\n"+aux);
|
||||||
|
}
|
||||||
|
for(aux = "";aux != null;aux = br.readLine()){
|
||||||
|
if(!aux.startsWith("<!DOCTYPE")) bw.write(aux+"\n");
|
||||||
|
}
|
||||||
|
bw.close();
|
||||||
|
}catch (Exception e){return null;}
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Esta clase se usa para comprobar que el xml es valido.
|
||||||
*/
|
*/
|
||||||
protected class SimpleErrorHandler implements ErrorHandler, org.xml.sax.ErrorHandler {
|
protected class SimpleErrorHandler implements ErrorHandler, org.xml.sax.ErrorHandler {
|
||||||
|
public boolean error = false;
|
||||||
/**
|
/**
|
||||||
* Un warning
|
* Un warning
|
||||||
* @param e La excepción
|
* @param e La excepción
|
||||||
@ -73,6 +139,7 @@ class LeerXML {
|
|||||||
*/
|
*/
|
||||||
public void error(SAXParseException e) throws SAXException {
|
public void error(SAXParseException e) throws SAXException {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,6 +149,7 @@ class LeerXML {
|
|||||||
*/
|
*/
|
||||||
public void fatalError(SAXParseException e) throws SAXException {
|
public void fatalError(SAXParseException e) throws SAXException {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,6 +168,7 @@ class LeerXML {
|
|||||||
@Override
|
@Override
|
||||||
public void error(org.xml.sax.SAXParseException e) {
|
public void error(org.xml.sax.SAXParseException e) {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -109,6 +178,7 @@ class LeerXML {
|
|||||||
@Override
|
@Override
|
||||||
public void fatalError(org.xml.sax.SAXParseException e) {
|
public void fatalError(org.xml.sax.SAXParseException e) {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
|
error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -49,6 +49,13 @@ public class MT extends Application {
|
|||||||
Document document = xml.leerArchivo(archivo);
|
Document document = xml.leerArchivo(archivo);
|
||||||
if (document != null) {
|
if (document != null) {
|
||||||
System.out.println(document.getDocumentElement().getNodeName());
|
System.out.println(document.getDocumentElement().getNodeName());
|
||||||
|
for(int i=0;i<document.getElementsByTagName("transicion").getLength();i++){
|
||||||
|
System.out.println("("+document.getElementsByTagName("qi").item(i).getTextContent()+","+
|
||||||
|
document.getElementsByTagName("si").item(i).getTextContent()+") = ("+
|
||||||
|
document.getElementsByTagName("qj").item(i).getTextContent()+","+
|
||||||
|
document.getElementsByTagName("sj").item(i).getTextContent()+","+
|
||||||
|
document.getElementsByTagName("movimiento").item(i).getTextContent()+")");
|
||||||
|
}//Ciclo base para obtener la función completa de las transiciones
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
6
xmltest/Descriptions
Normal file
6
xmltest/Descriptions
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
mT.xml : Caso ideal, con <?xml> y <!DOCTYPE> definidos correctamente
|
||||||
|
mT1.xml : No definidos <?xml> y <!DOCTYPE>, pero las transiciones con correctas
|
||||||
|
mT2.xml : <?xml> definido, pero <!DOCTYPE> es un archivo distinto
|
||||||
|
mT3.xml : <?xml> definido, pero <!DOCTYPE> no lo esta
|
||||||
|
mT4.xml : <?xml> y <!DOCTYPE> definidos correctamente, pero las transiciones estan errados
|
||||||
|
mtbase.dtd : Base para validar xml
|
18
xmltest/mT.xml
Normal file
18
xmltest/mT.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE root SYSTEM "mtbase.dtd">
|
||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>1</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
16
xmltest/mT1.xml
Normal file
16
xmltest/mT1.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>1</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
18
xmltest/mT2.xml
Normal file
18
xmltest/mT2.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE root SYSTEM "tmbase.dtd">
|
||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>1</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
17
xmltest/mT3.xml
Normal file
17
xmltest/mT3.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>1</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
16
xmltest/mT4.xml
Normal file
16
xmltest/mT4.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE root SYSTEM "mtbase.dtd">
|
||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
7
xmltest/mtbase.dtd
Normal file
7
xmltest/mtbase.dtd
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<!ELEMENT root (transicion+)>
|
||||||
|
<!ELEMENT transicion (qi,si,qj,sj,movimiento)>
|
||||||
|
<!ELEMENT qi (#PCDATA)>
|
||||||
|
<!ELEMENT si (#PCDATA)>
|
||||||
|
<!ELEMENT qj (#PCDATA)>
|
||||||
|
<!ELEMENT sj (#PCDATA)>
|
||||||
|
<!ELEMENT movimiento (#PCDATA)>
|
Loading…
Reference in New Issue
Block a user