This tutorial offers a thorough exploration of XML processing in Java, including parsing methods compliant with W3C standards: DOM and SAX. Learn how to convert XML into a tree of objects with DOM, allowing random access, and delve into SAX for efficient event-driven parsing. The guide covers practical examples, such as the structure of XML documents and the use of DTD for validation. With easy-to-follow explanations and code snippets, you’ll gain essential skills for manipulating and accessing XML data within Java applications.
01 / 75Comprehensive Guide to XML Processing in Java: DOM and SAX Parsers Explained
1 / 17
Télécharger la présentation
Comprehensive Guide to XML Processing in Java: DOM and SAX Parsers Explained
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
F I N
Plus de contenu associé
Transcription de la présentation
Processing XML with Java A comprehensive tutorial about XML processing with Java XML tutorial of W3Schools
Parsers • What is a parser? Formal grammar Analyzed Data Input Parser The structure(s) of the input, according to the atomic elements and their relationships (as described in the grammar)
XML-Parsing Standards • We will consider two parsing methods that implement W3C standards for accessing XML • DOM • convert XML into a tree of objects • “random access” protocol • SAX • “serial access” protocol • event-driven parsing
world.dtd <!ELEMENTcountries(country*)> <!ELEMENTcountry(name,population?,city*)> <!ATTLISTcountrycontinentCDATA#REQUIRED> <!ELEMENTname (#PCDATA)> <!ELEMENTcity (name)> <!ATTLISTcitycapital(yes|no) "no"> <!ELEMENTpopulation (#PCDATA)> <!ATTLISTpopulationyearCDATA#IMPLIED> <!ENTITYeu"Europe"> <!ENTITYas"Asia"> <!ENTITY af"Africa"> <!ENTITY am"America"> <!ENTITY au"Australia"> parsed Not parsed default value As opposed to required Open world.xml in your browser Check world2.xml for #PCDATA exmaple
DOM Parser • DOM = Document Object Model • Parser creates a tree object out of the document • User accesses data by traversing the tree • The tree and its traversal conform to a W3C standard • The API allows for constructing, accessing and manipulating the structure and content of XML documents
Application API XML File DOM Parser DOM Tree Using a DOM Tree in memory
Creating a DOM Tree • A DOM tree is generated by a DocumentBuilder • The builder is generated by a factory, in order to be implementation independent • The factory is chosen according to the system configuration DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("world.xml");
Configuring the Factory • The methods of the document-builder factory enable you to configure the properties of the document building • For example • factory.setValidating(true) • factory.setIgnoringComments(false) Read more about DocumentBuilderFactory Class, DocumentBuilder Class
The Node Interface • The nodes of the DOM tree include • a special root (denoted document) • The Document interface retrieved by builder.parse(…) actually extends the Node Interface • element nodes • text nodes and CDATA sections • attributes • comments • and more ... • Every node in the DOM tree implements the Node interface This is very unintuitive (some would even say this is a bloated design)
Figure as appears in : “The XML Companion” - Neil Bradley NodeList NamedNodeMap A light-weight fragment of the document. Can hold several sub-trees Interfaces in a DOM Tree DocumentFragment Document Text CDATASection CharacterData Comment Attr Element Node DocumentType Notation Entity EntityReference Run FragmentVsElement with 1st argument fragment/element ProcessingInstruction DocumentType
Document Type Element Attribute Attribute Element Element Text Text Element Entity Reference Text Text Comment Text Interfaces in the DOM Tree Document
Node Navigation • Every node has a specific location in tree • Node interface specifies methods for tree navigation • Node getFirstChild(); • Node getLastChild(); • Node getNextSibling(); • Node getPreviousSibling(); • Node getParentNode(); • NodeList getChildNodes(); • NamedNodeMap getAttributes()
Not a very OO approach… reminds one of simulating OO using unions in C…. Node Properties Only Element Nodes have attributes… some would say this should’ve been a property of the Element derived class and not of Node. • Every node has (a dubious design and…) • a type • a name • a value • attributes • The roles of these properties differ according to the node types • Nodes of different types implement different interfaces (that extend Node) Very few nodes have both a significant name and a significant value
import org.w3c.dom.*; import javax.xml.parsers.*; publicclass EchoWithDom { publicstaticvoid main(String[] args) throwsException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setIgnoringElementContentWhitespace(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(“world.xml"); new EchoWithDom().echo(doc); } e.g white spaces used for indentation in non mixed data elements
privatevoid echo(Node n) { print(n); if (n.getNodeType() == Node.ELEMENT_NODE) { NamedNodeMap atts = n.getAttributes(); ++depth; for (int i = 0; i < atts.getLength(); i++) echo(atts.item(i)); --depth; } depth++; for (Node child = n.getFirstChild(); child != null; child = child.getNextSibling()) echo(child); depth--; } Attribute nodes are not included…
privateint depth = 0; privateString[] NODE_TYPES = { "", "ELEMENT", "ATTRIBUTE", "TEXT", "CDATA", "ENTITY_REF", "ENTITY", "PROCESSING_INST", "COMMENT", "DOCUMENT", "DOCUMENT_TYPE", "DOCUMENT_FRAG", "NOTATION" }; privatevoid print(Node n) { for (int i = 0; i < depth; i++) System.out.print(" "); System.out.print(NODE_TYPES[n.getNodeType()] + ":"); System.out.print("Name: "+ n.getNodeName()); System.out.print(" Value: "+ n.getNodeValue()+"\n"); }} run EchoWithDom, pay attention to the default values
Normalizing the DOM Tree • Normalizing a DOM Tree has two effects: • Combine adjacent textual nodes • Eliminate empty textual nodes • To normalize, apply the normalize() method to the document element Created by node manipulation…
Node Manipulation • Children of a node in a DOM tree can be manipulated - added, edited, deleted, moved, copied, etc. • To constructs new nodes, use the methods of Document • createElement,createAttribute, createTextNode, createCDATASection etc. • To manipulate a node, use the methods of Node • appendChild, insertBefore, removeChild,replaceChild, setNodeValue, cloneNode(boolean deep)etc.
SAX Parser • SAX = Simple API for XML • XML is read sequentially • When a parsing event happens, the parser invokes the corresponding method of the corresponding handler. • This is called event-driven programming. Most GUI programs are written using this paradigm. • The handlers are programmer’s implementation of standard Java API (i.e., interfaces and classes)
<?xml version="1.0"?> . . . SAX Parsers When you see the start of the document do … SAX Parser When you see the start of an element do … When you see the end of an element do …
Used to create a SAX Parser Handles document events: start tag, end tag, etc. Handles Parser Errors Handles DTD Handles Entities
Connexion au compte
Connectez-vous pour publier votre contenu sur SlideServe.