XML - Managing Data Exchange/Parsing XML files/Answers
From Wikibooks, open books for an open world
This java class file is associated with the movies.xml file used in the chapter. Place this java file and movies.xml in the same directory. After compiling, this needs to be run from a command window and the format is: > java SPParser movies.xml
import javax.xml.parsers.*; import org.xml.sax.*; import org.w3c.dom.*; import java.io.*; public class SPParser { static Document doc; public SPParser(String filename) { //filename S/B the name of the XML file to parse File file = new File(filename); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); doc = parser.parse(file); System.out.println(file + " is well-formed."); } catch (SAXException e) { System.out.println( e.getMessage()); } catch (IOException e) { System.out.println( e.getMessage()); } catch (ParserConfigurationException e) { System.out.println("Could not locate a JAXP parser"); } } public void readData(Node n) { System.out.println("Printing data and attributes"); NamedNodeMap attributes = n.getAttributes(); String strAttributes = "Production Company- '" + attributes.item(0).getNodeValue(); if (attributes.getLength() == 2) //There are two attributes in the movies.xml file strAttributes += "' , Loaned To - '" + attributes.item(1).getNodeValue() + "' ,"; else strAttributes += "' , Not out , "; NodeList values = n.getChildNodes(); String dataString = "Movies Data: " + strAttributes; int ancestor = 0; for (int i = 0; i < values.getLength(); i++) { Node child = values.item(i); if (child.getNodeType() != Node.TEXT_NODE) { String insert = child.getFirstChild().getNodeValue(); if (insert.trim().length() != 0 && ancestor == 0) { dataString += "Movie Title - '"+insert+"', "; ancestor = 1; } else if (insert.trim().length() != 0 && ancestor == 1) { dataString += "Director - '"+insert+"'."; ancestor = 0; } } }//End of for-loop System.out.println(dataString); System.out.println(); }//End of insertStatements() public static void main(String[] args) { SPParser p = new SPParser("movies.xml"); NodeList n = doc.getElementsByTagName("movie"); for (int i = 0; i < n.getLength(); i++) { p.readData(n.item(i)); } }//End of main() }//End of SPParser class |
This page may need to be