Coo eu faço para uma DTD analisar meu código XML. Estes dois arquivos tem q estar no mesmo diretório e no arquivo xml o que que eu ponho para o arquivo invocar o outro arquivo DTD?
Valeu!
Coo eu faço para uma DTD analisar meu código XML. Estes dois arquivos tem q estar no mesmo diretório e no arquivo xml o que que eu ponho para o arquivo invocar o outro arquivo DTD?
Valeu!
Bem kra… vamos supor o seguinte xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE conteudo SYSTEM "Teste.dtd">
<conteudo>
<font>
<face>Comic Sans Ms</face>
<size>16</size>
</font>
</conteudo>
Nele foi especificado qual o dtd (Teste.dtd)
<!ELEMENT conteudo (font)>
<!ELEMENT font (face, size)>
<!ELEMENT face (#PCDATA)>
<!ELEMENT size (#PCDATA)>
No seu programa java, você deve fazer da seguinte maneira para ler o arquivo utilizando o dtd:
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true); // Ajusta para validar
dbf.setIgnoringElementContentWhitespace(true); // Ignora os espaços entre tags
dbf.setIgnoringComments(true);
DocumentBuilder db = dbf.newDocumentBuilder();
// Ajusta o error handles, se o arquivo tiver um erro na validação pelo dtd, o erro vai ser passado para esse ErrorHandler
db.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException exception) throws SAXException {
throw exception;
}
public void fatalError(SAXParseException exception)
throws SAXException {
throw exception;
}
public void warning(SAXParseException exception)
throws SAXException {
throw exception;
}
});
Document d = db.parse(new File("Teste.xml"));
Element doc = d.getDocumentElement();
System.out.println(doc.getNodeName());
Element font = (Element) doc.getChildNodes().item(0);
System.out.println(font.getNodeName());
Element face = (Element) font.getChildNodes().item(0);
System.out.println(face.getNodeName() + ": " + face.getFirstChild().getNodeValue());
Element size = (Element) font.getChildNodes().item(1);
System.out.println(size.getNodeName() + ": " + size.getFirstChild().getNodeValue());
} catch (Exception e) {
e.printStackTrace();
}
Espero ter ajudado…
Flw…