prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing...

50
Basics of programming 3 programming 3 XML handling in Java

Transcript of prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing...

Page 1: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Basics of

programming 3programming 3

XML handling in Java

Page 2: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� eXtensible Markup Language

� Goal: standard, human readable data format

� storing

� transmitting

XML intro

� transmitting

� backed by the success of HTML

� text-based

� cf. toString()

� Today: „Whatever the question, XML is the

answer„

� or JSON…Basics of programming 3 © BME IIT, Goldschmidt Balázs 2

Page 3: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

XML history

� GML

� generalized markup language

� IBM, '60

Basics of programming 3 © BME IIT, Goldschmidt Balázs 3

� document markup

:h1.Chapter 1: Introduction

:p.GML supported hierarchical containers, such as

:ol

:li.Ordered lists (like this one),

:eol.

as well as simple structures.

:p.Markup minimization allowed the end-tags to be

omitted for the "h1" and "p" elements.

Page 4: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� SGML

� standard generalized markup language

� 1986

XML history

� encyclopedias, dictionaries (OED), databases

� XML-like

� DTD is invented

Basics of programming 3 © BME IIT, Goldschmidt Balázs 4

Page 5: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� HTML

� hypertext markup language

� 1991

XML history

� web pages

� breakthrough

� earlier gopher, etc.

� not flexible enough

� compatibility issues

� "this page is optimized for ObscureBrowser 11.3a"

Basics of programming 3 © BME IIT, Goldschmidt Balázs 5

Page 6: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� Tree structure: hierarchy

� tags, attributes and text

� W3C standard

XML features

� syntax

� parsing rules

� well-formedness and validity

� Meta-structure, can be extended

Basics of programming 3 © BME IIT, Goldschmidt Balázs 6

Page 7: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

XML well-formedness

� Syntax rules

�optional header

<?xml version="1.0" encoding="UTF-8"?>

Basics of programming 3 © BME IIT, Goldschmidt Balázs 7

�each tag has a closing counterpart

� there is a root

� tags sequentially or embedded

<?xml version="1.0" encoding="UTF-8"?>

<p>Hello <img src=„kitty.png"/> </p>

Page 8: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

XML syntax

�comment

� tag attribute

<!– this is a comment -->

Basics of programming 3 © BME IIT, Goldschmidt Balázs 8

� always use quotation marks

�special signs

<img src="cat.png"/>

XML text

&amp; &

&lt; <

&gt; >

&apos; '

&quot; "

Page 9: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� Semantic rules

� Constraints can be given as…

� schema

XML validity

� DTD (document type definition)

� Specifies the structure of a document

� allowed elements

� allowed hierarchy

� allowed attributes

� ...

Basics of programming 3 © BME IIT, Goldschmidt Balázs 9

Page 10: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� DTD

� old

� missing features

XML semantics specification

� deprecated

� XML schema (XSD)

� new

� structured: elements and connections

� namespaces

� in XML itself

Basics of programming 3 © BME IIT, Goldschmidt Balázs 10

Page 11: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DTD example (XML file)

<?xml version="1.0" encoding="UTF-8"?><people_list>

<person><name>Neil Armstrong</name><birthdate>1930-08-05</birthdate>

11

<birthdate>1930-08-05</birthdate><gender>Male</gender>

</person><person>

<name>Buzz Aldrin</name><birthdate>1930-01-20</birthdate><gender>Male</gender><neptuncode>M00N02</neptuncode>

</person></people_list>

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 12: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DTD example (DTD description)

<!ELEMENT people_list (person*)><!ELEMENT person (name, birthdate, gender?,

neptuncode?)><!ELEMENT name (#PCDATA)>

12

<!ELEMENT name (#PCDATA)><!ELEMENT birthdate (#PCDATA)><!ELEMENT gender (#PCDATA)><!ELEMENT neptuncode(#PCDATA)>

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 13: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

XSD example<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="people_list"><xs:complexType><xs:sequence>

<xs:element name="person" maxOccurs="unbounded"><xs:complexType><xs:sequence>

<xs:element name="name" type="xs:string"/>

13

<xs:element name="name" type="xs:string"/><xs:element name="birthdate" type="xs:string"/><xs:element name="gender" type="xs:string"

minOccurs="0"/><xs:element name=„neptuncode" type="xs:string"

minOccurs="0"/></xs:sequence></xs:complexType>

</xs:element></xs:sequence></xs:complexType>

</xs:element></xs:schema>

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 14: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� manual

� simply don’t

� SAX (simple API for XML)

XML handling

� event based

� sequential

� DOM (Document Object Model)

� dumb object structure

� JDOM (Java DOM)

� smart object structure

Basics of programming 3 © BME IIT, Goldschmidt Balázs 14

Page 15: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� Event handling

� start/end of document

� start/end of tag

SAX parser usage

� start/end of prefixMapping

� characters (text)

� whitespace

� skipped entities

� processing instructions

Basics of programming 3 © BME IIT, Goldschmidt Balázs 15

Page 16: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

SAX parser classes

SAXParserFactory

SAXParser

+parse(f: File, h: ContentHandler)

ContentHandler<<interface>>

+startDocument()+endDocument()

DefaultHandler

Basics of programming 3 © BME IIT, Goldschmidt Balázs 16

SAXParserFactory

+newInstance()+newSAXParser()

+endDocument()+startElement()+endElement()+startPrefixMapping()+endPrefixMapping()+setDocumentLocator(l:Locator)

MyParser

Locator<<interface>>

+getColumnNumber():int+getLineNumber(): int+getSystemId(): String

Page 17: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler interface

� org.xml.sax.ContentHandler

� This is to be implemented

� Callback-based event handling

Basics of programming 3 © BME IIT, Goldschmidt Balázs 17

� Callback-based event handling

� for each event a method is provided

� Empty implementation

� org.xml.sax.helpers.DefaultHandler

� all methods are empty

Page 18: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler

� void startDocument()� void endDocument()

� void startElement(String uri, String localName, String qName,

Basics of programming 3 © BME IIT, Goldschmidt Balázs 18

String localName, String qName, Attributes atts)

� void endElement(String uri, String localName, String qName)

� void startPrefixMapping(String prefix, String uri)

� void endPrefixMapping(String prefix)

Page 19: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler

� void characters(char[] ch, int start, int length)

� void ignorableWhitespace(char[] ch, int start, int length)

Basics of programming 3 © BME IIT, Goldschmidt Balázs 19

int start, int length)� void processingInstruction(String target,

String data)� void skippedEntity(String name)

� void setDocumentLocator(Locator locator)� locator can get access to further processing data

Page 20: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� Problem:

�Let’s create a simple Java application

� that prints out the XML tree

ContentHandler example

� that prints out the XML tree

� attributes are omitted

� texts are omitted

Basics of programming 3 © BME IIT, Goldschmidt Balázs 20

Page 21: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

� Solution:

� implement interface ContentHandler

� using class DefaultHandler

ContentHandler example

� using class DefaultHandler

�register handler

�parse the XML file

Basics of programming 3 © BME IIT, Goldschmidt Balázs 21

Page 22: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler example

public class MyParser extends DefaultHandler {

public static void main(String[] args) {DefaultHandler h = new MyParser();SAXParserFactory factory =

Basics of programming 3 © BME IIT, Goldschmidt Balázs 22

SAXParserFactory.newInstance();try {

SAXParser p = factory.newSAXParser();p.parse(new java.io.File(args[0]), h);

} catch (Exception e) {e.printStackTrace();}}

...

Page 23: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler example

...int tab=0;public void println(String s) {

for (int i = 0; i < tab; i++) {System.out.print(" ");

Basics of programming 3 © BME IIT, Goldschmidt Balázs 23

}System.out.println(s);

}public void startDocument() throws SAXException {

println("Start document");}public void endDocument() throws SAXException {

println("End document");}...

Page 24: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler example

...public void startElement(String namespaceURI,

String sName, String qName, Attributes attrs) throws SAXException {tab++;

Basics of programming 3 © BME IIT, Goldschmidt Balázs 24

println("start element: "+qName);}

public void endElement(String namespaceURI, String sName, String qName) throws SAXException {println("end element: "+qName);tab--;

}}

Page 25: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler example input

<!-- test.xml --><level1>

<level2><level3 attr1="test1"></level3>

Basics of programming 3 © BME IIT, Goldschmidt Balázs 25

<level3 attr1="test2" attr2="second"></level3><level3 attr1="test3"></level3>

</level2></level1>

Page 26: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

ContentHandler example output

$ java MyParser test.xml Start document

start element: level1start element: level2

start element: level3

Basics of programming 3 © BME IIT, Goldschmidt Balázs 26

end element: level3start element: level3end element: level3start element: level3end element: level3

end element: level2end element: level1

End document

Page 27: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Locator

� Provides information about processed file

� void setDocumentLocator(Locator l)

27

� int getColumnNumber()� index of character in current line the handler is processing

� int getLineNumber()� index of line being processed

� String getSystemId()� name of document (e.g. filename) as a URL

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 28: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Locator classes

SAXParser

+parse(f: File, h: ContentHandler)

ContentHandler<<interface>>

+startDocument()+endDocument()

DefaultHandler

Basics of programming 3 © BME IIT, Goldschmidt Balázs 28

SAXParserFactory

+newInstance()+newSAXParser()

+endDocument()+startElement()+endElement()+startPrefixMapping()+endPrefixMapping()+setDocumentLocator(l: Locator)

MyParser

Locator

+getColumnNumber(): int+getLineNumber(): int+getSystemId(): String

<<interface>>

Page 29: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Locator example

Locator loc = null;public void setDocumentLocator(Locator l) {

println("LOCATOR");loc = l;

}

29

public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException {

tab++;println("start element: "+qName);println(" Locator: ("+loc.getLineNumber()

+","+loc.getColumnNumber()+") "+loc.getPublicId()+", "+loc.getSystemId());

...}

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 30: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Locator example input

<!-- test.xml --><level1>

<level2><level3 attr1="test1"></level3>

30

<level3 attr1="test2" attr2="second">

</level3><level3 attr1="test3"></level3>

</level2></level1>

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 31: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Locator example output

$ java MyParser test.xml LOCATORStart document

start element: level1Locator: (1,9) null,

31

file:/home/balage/sax-example/example4/test.xmlstart element: level2

Locator: (3,10) null, file:/home/balage/sax-example/example4/test.xml

start element: level3Locator: (4,25) null,

file:/home/balage/sax-example/example4/test.xmlattr0: attr1=test1

end element: level3...

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 32: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Document validity

� Let’s add validation

SAXParserFactory factory = SAXParserFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);

32

factory.setNamespaceAware(true);

SAXParser p = factory.newSAXParser();String JAXP_SCHEMA_LANGUAGE ="http://java.sun.com/xml/jaxp/properties/schemaLanguage";String W3C_XML_SCHEMA ="http://www.w3.org/2001/XMLSchema"; p.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 33: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

XML error handling

� Error types

� fatal error

� document is not well formed

� error

33

� error

� document is not valid

� warning

� small error, e.g. same type declared twice

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 34: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Document Object Model

34

Document Object Model

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 35: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM

� Document Object Model

� builds an object model based on the XML content

� Object model can be modified

35

� and printed out as XML

� Validation included

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 36: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM classes

DocumentBuilderFactory

+newInstance(): DocumentBuilderFactory+newDocumentBuilder(): DocumentBuilder+setValidating(b: boolean)+setNamespaceAware(b: boolean)

Node

+getNodeName(): String+getNodeValue()+getAttributes(): NamedNodeMap+getChildNodes(): NodeList

NamedNodeMap

+namename

*

Basics of programming 3 © BME IIT, Goldschmidt Balázs 36

DocumentBuilder

+parse(f: File): Document

Document

+getChildNodes(): NodeList

NodeList

+getLength(): int+item(i: int): Node

*

Page 37: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM introductory example

try {DocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance();factory.setValidating(true);factory.setNamespaceAware(true);

37

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(new java.io.File(args[0]));

...} catch (Exception e) {

e.printStackTrace();}

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 38: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Document

� Represents the document

� this is not the root element!

� Base data can be accessed

38

� doctype, XML version, etc

� Can create elements

� attribute, element, comment, etc.

� Is itself a Node

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 39: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Node

� An element of the tree

� element, attribute, comment, text, etc.

� Its data can be accessed and modified

39

� name, type, value, etc.

� Is navigable

� up: parent and document

� down: children

� sideways: siblings

� Children can be modified (add, delete)

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 40: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM helper classes

� NodeList

� when accessing the children of a Node

� NodeList Node.getChildNodes()

40

� int getLength()

� length of the list

� Node item(int index)

� returns element at index index

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 41: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM helper classes

� NamedNodeMap� for accessing the attributes of a Node

� NamedNodeMap Node.getAttributes()

� int getLength()

41

� int getLength()� size of the set

� Node item(int index)� Node at index

� Node getNamedItem(String name)

� Node getNamedItemNS(String namespaceURI, String localName)

� Node with the given name

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 42: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM helper classes

� NamedNodeMap (cont.)

� Node removeNamedItem(String name)

� Node removeNamedItemNS(String namespaceURI, String localName)

42

namespaceURI, String localName)

� removes the element from the set and the Node

� swapped for default value if specified

� Node setNamedItem(Node arg)

� Node setNamedItemNS(Node arg)

� modifies the value of the item

� stores according to attribute nodeName

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 43: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

Example: simple printout

static void print(Node n, String tab) {System.out.println(tab+"("+n.getNodeName()+") \""

+n.getNodeValue()+"\"");if (n.hasAttributes()) {

NamedNodeMap map = n.getAttributes();for (int i = 0; i < map.getLength(); i++) {

43

for (int i = 0; i < map.getLength(); i++) {Node n1 = map.item(i);print(n1, tab+"attr: ");

}}NodeList nl = n.getChildNodes();for (int i = 0; i < nl.getLength(); i++) {

Node n1 = nl.item(i);print(n1, tab+" ");

}} Recursion

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 44: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

DOM specialities

� Name of XML tag is the name of the Node� getNodeName()

� Value of XML tag is value of a child of the Node� child called #text

44

� child called #text

� getNodeValue()

� Name and value of XML attribute is the name and value of the Node� also has a child with name #text that stores the

value

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 45: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM

� Object model closer to XML

� Attribute, CDATA, Comment, Content, DefaultJDOMFactory, DocType, Document, Element, EntityRef, Namespace,

45

Element, EntityRef, Namespace, ProcessingInstruction, Text

� Attributes, children are easier to access, modify

� no NamedNodeMap, NodeList

� uses java.util.List

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 46: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM classes (partial)

SAXBuilder

+build(f: File): Document

DOMBuilder

+build(d: dom.Document): Document

dom.Documentjava.io.File

Basics of programming 3 © BME IIT, Goldschmidt Balázs 46

+build(f: File): Document +build(d: dom.Document): Document

Document

+getRootElement(): Element

Element

+getChildren(): List<Element>+getAttributes(): List<Attribute>+getName(): String+getNamespace(): Namespace+getText(): String

+removeXXX()+setXXX()

#rootElement

Attribute*+name+name

#parent#children 1*

DocType

Namespace

Page 47: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM

� Filters can be specified for searching

� org.jdom.filter.Filter

� boolean matches(java.lang.Object obj)

Supports XSL transformations

47

� Supports XSL transformations

� org.jdom.transform.XSLTranformer

� Supports XPATH searches

� org.jdom.xpath.XPath

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 48: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM

� Parsing is out-sourced� DOMBuilder

� SAXBuilder

� Document can be saved

48

� Document can be saved� as XML document

� as a DOM model

� using SAX event-generator

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 49: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM Example: simple printout

public class JDOMParse {static void print(Element n, String tab) ...public static void main(String[] args) {

SAXBuilder b = new SAXBuilder();File f = new File("test.xml");

try {

49

try {Document doc = (Document)b.build(f);Element r = doc.getRootElement();print(r, "");

} catch (IOException io) {System.out.println(io.getMessage());

} catch (JDOMException je) {System.out.println(je.getMessage());

}}

}

Basics of programming 3 © BME IIT, Goldschmidt Balázs

Page 50: prog3 b xml v5 · eXtensible Markup Language Goal: standard, human readabledataformat storing transmitting XML intro backed bythesuccessof HTML text-based cf. toString() Today: „Whateverthequestion,

JDOM Example: simple printout

static void print(Element n, String tab) {System.out.println(tab+"("+n.getName()

+") \""+n.getValue()+"\"");if (n.hasAttributes()) {

List<Attribute> list = n.getAttributes();for (Attribute a : list) {

50

for (Attribute a : list) {System.out.println(tab+"attr: "+a);

}}List<Element> nl = n.getChildren();for (Element e : nl) {

print(e, tab+" ");}

}

Recursion

Basics of programming 3 © BME IIT, Goldschmidt Balázs