Há uma variedade deles, com diferentes estratégias para apresentar o conteúdo. Por exemplo, um parser DOM carrega o documento todo em memória, o que pode ter desvantagens, por exemplo, se o arquivo for muito grande. Um parser SAX carrega partes, hierarquicamente, ... Referências:
Existem tutoriais na documentação oficial para Java 8.
- https://docs.oracle.com/javase/tutorial/jaxp/index.html
- https://docs.oracle.com/javase/tutorial/jaxp/intro/simple.html
Existem outros tutoriais:
- https://www.tutorialspoint.com/java_xml/java_dom_query_document.htm
- https://mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
Existem threads de perguntas/respostas:
Seguirei por:
- https://www.baeldung.com/java-xml, que aponta para:
- https://howtodoinjava.com/java/xml/read-xml-dom-parser-example/
- no fim da página tem um link para o código zipado.
O zip tem a seg. estrutura:
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples$ tree . ├── bin │ └── com │ └── howtodoinjava │ └── dom │ ├── Employee.class │ ├── ParseKnownXMLStructure.class │ ├── ParseUnknownXMLStructure.class │ └── PopulateDTOExamplesWithParsedXML.class ├── employees.xml └── src └── com └── howtodoinjava └── dom ├── Employee.java ├── ParseKnownXMLStructure.java ├── ParseUnknownXMLStructure.java └── PopulateDTOExamplesWithParsedXML.java 8 directories, 9 files
Quero saber que arquivos contém método main
:
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples$ grep -r -i main * Arquivo binário bin/com/howtodoinjava/dom/ParseKnownXMLStructure.class coincide com o padrão Arquivo binário bin/com/howtodoinjava/dom/ParseUnknownXMLStructure.class coincide com o padrão Arquivo binário bin/com/howtodoinjava/dom/PopulateDTOExamplesWithParsedXML.class coincide com o padrão src/com/howtodoinjava/dom/ParseUnknownXMLStructure.java: public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException src/com/howtodoinjava/dom/PopulateDTOExamplesWithParsedXML.java: public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException src/com/howtodoinjava/dom/ParseKnownXMLStructure.java: public static void main(String[] args) throws Exception { fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples$
Esta estrutura tem jeito de que foi feita por algum ambiente integrado, mas o autor não informa qual foi, nem qual a linha de comando que seria equivalente a compilar e executar o código. Escolhi ParseUnknownXMLStructure.java
como alvo para compilar. Como tem método main
, o restante do código deve ter sido organizado para que seja possível executá-lo.
Para compilar, a partir da pasta JavaDOMParserExamples
, criada quando deszipei o pacote compactado, usei javac src/com/howtodoinjava/dom/ParseUnknownXMLStructure.java
. O .class
foi criado na mesma pasta do arquivo-fonte.
No arquivo-fonte, o pacote a que pertence é com.howtodoinjava.dom
, logo, deve ser executado a partir da pasta acima de com
. Desta forma a primeira tentativa de execução é java com.howtodoinjava.dom.ParseUnknownXMLStructure
a partir da pasta src
:
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples/src$ java com.howtodoinjava.dom.ParseUnknownXMLStructure Exception in thread "main" java.io.FileNotFoundException: /home/fabio/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples/src/employees.xml (Arquivo ou diretório inexistente) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112) at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86) at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:652) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824) at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246) at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:206) at com.howtodoinjava.dom.ParseUnknownXMLStructure.main(ParseUnknownXMLStructure.java:26) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/LerXMLcomJava/JavaDOMParserExamples/src$
A mensagem indica que o arquivo contendo o exemplo era esperado na pasta em que executei o programa (mas está na pasta acima, coisas de ambiente integrado) então vou fazer uma cópia no local esperado.
Ok, leu, conforme o tutorial que segui.
nota: removi os .class
para evitar que (você) execute algo que não compilou (e pode não ser o que estão lhe dizendo).
nota: quando fui limpar as pastas para por no Github, vi alguns arquivos e pastas ocultos: .settings
, .classpath
e .project
. Pelo conteúdo deu para ver que a IDE que o autor usou era Eclipse e usava Java 7. Removi os arquivos. Caso precise do conjunto completo de arquivos, sugiro baixar da referência original.