+ All Categories
Home > Technology > Parsing XML Data

Parsing XML Data

Date post: 12-May-2015
Category:
Upload: mu-chun-wang
View: 1,443 times
Download: 2 times
Share this document with a friend
Popular Tags:
18
Parsing XML Data Kewang
Transcript
Page 1: Parsing XML Data

Parsing XML Data

Kewang

Page 2: Parsing XML Data

2

Sample XML<?xml version="1.0" encoding="utf-8"?><CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD></CATALOG>

Page 3: Parsing XML Data

3

SAXSimple API for XML

Page 4: Parsing XML Data

4

Page 5: Parsing XML Data

5

SAX sample (1/2)

SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser sp = factory.newSAXParser();XMLReader xr = sp.getXMLReader();InputSource is = new InputSource(new StringReader(xml.toString()));

xr.setContentHandler(handler);xr.setErrorHandler(handler);

xr.parse(is);

Page 6: Parsing XML Data

6

SAX sample (2/2)private DefaultHandler handler = new DefaultHandler() { private boolean hasTitle;

@Override public void characters(char[] ch, int start, int length) { if (hasTitle) { txtResult.setText(new String(ch, start, length)); } }

@Override public void endElement(String uri, String lName, String qName) { hasTitle = false; }

@Override public void startElement(String uri, String lName, String qName, Attributes attrs) { hasTitle = lName.equals("TITLE"); }};

Page 7: Parsing XML Data

7

XML Pull sampleXmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser xpp = factory.newPullParser();

xpp.setInput(new StringReader(xml.toString()));

int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: if (xpp.getName().equals("TITLE")) { txtResult.setText(xpp.nextText()); }

break; }

eventType = xpp.next();}

Page 8: Parsing XML Data

8

DOMDocument Object Model

Page 9: Parsing XML Data

9

Page 10: Parsing XML Data

10

W3C DOM exampleDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(new ByteArrayInputStream(xml.toString().getBytes()));Element root = doc.getDocumentElement();NodeList cds = root.getChildNodes();

for (int i = 0; i < cds.getLength(); i++) { Node cd = cds.item(i);

if (cd.getNodeType() == Node.ELEMENT_NODE) { NodeList titles = cd.getChildNodes();

for (int j = 0; j < titles.getLength(); j++) { Node title = titles.item(j);

if (title.getNodeType() == Node.ELEMENT_NODE && title.getNodeName().equals("TITLE")) { txtResult.setText(title.getFirstChild().getNodeValue()); } } }}

Page 11: Parsing XML Data

11

JDOM example

SAXBuilder sax = new SAXBuilder();Document doc = sax.build(new StringReader(xml.toString()));Element root = doc.getRootElement();

for (Element elem : root.getChildren("CD")) { txtResult.setText(elem.getChildText("TITLE"));}

inner Structure: SAX parserouter Structure: DOM operation

Page 12: Parsing XML Data

12

Jsoup example

Document doc = Jsoup.parse(xml.toString());Elements titles = doc.select("TITLE");

for (Element elem : titles) { txtResult.setText(elem.text());}

v1.6.2(2012/3/27): add XML parsersupport selector syntax

Page 13: Parsing XML Data

13

Charts

Page 14: Parsing XML Data

14

SAX

XMLPULL

W3C

JDOM

JSOUP

0 100 200 300 400 500 600 700

XML parsing speed

Milliseconds

Met

hod

Page 15: Parsing XML Data

15

SAX

XMLPULL

W3C

JDOM

JSOUP

0 10 20 30 40 50 60

Code Line

Code Line

Met

hod

Page 16: Parsing XML Data

16

Which one?SAX vs. DOM

Page 17: Parsing XML Data

17

Which one?

Memory Speed Parser Modify Traversing

SAX Small Fast Event Can't One-way

DOM Large Slow Tree model Can Any-way


Recommended