XML x DTD

1 resposta
G

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!

1 Resposta

J

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…

Criado 13 de dezembro de 2004
Ultima resposta 3 de jan. de 2005
Respostas 1
Participantes 2