Piotr Czapiewski Wydział Informatyki ZUT
Extensible Markup Language Język znaczników Human-readable and machine-readable Niezależny od platformy Reprezentacja dokumentów lub danych ustrukturalizowanych
Deklaracja XML Element główny (root) Elementy Zagnieżdżanie Atrybuty Elementy puste Java i XML. Wydanie III Brett D. McLaughlin Justin Edelson Helion 2007
Metajęzyk Brak zdefiniowanych znaczników, jedynie reguły znakowania Aplikacje XML Specjalizowane języki bazujące na XML XHTML, WML, SVG, MathML, DocBook, WSDL, … XML DTD XHTML XHTML
Definiowanie struktury dokumentu XML DTDXML Schema
<!DOCTYPE kontakty [ <!ATTLIST kontakt typ (prywatny | służbowy) "prywatny" id ID #REQUIRED> <!ATTLIST telefon typ (stacjonarny | komórkowy) "stacjonarny"> ]> Piotr Czapiewski Jan Kowalski
<xs:schema version="1.0" xmlns:xs=" targetNamespace=" xmlns=" elementFormDefault="qualified">
Zapobieganie konfliktom nazw Elementy z różnych „słowników” w jednym dokumencie Deklaracja: prefiks oraz URI Product Description Product Description
Product Description Product Description <root xmlns:h=" xmlns:f=" Product Description African Coffee Table <root xmlns:h=" xmlns:f=" Product Description African Coffee Table Coffee Table Coffee Table
DOM, SAX Parsowanie JAXB Wiązanie XML XPath Przeszukiwanie XSLT Przekształcenia
100 sposobów na Excel 2007 PL David Hawley, Raina Hawley Helion pytań na temat e-biznesu do Piotra Majewskiego Piotr Majewski Helion
private static class MyHandler extends DefaultHandler { public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {... } public void endElement(String uri, String localName, String qName) throws SAXException {... } public void characters(char[] ch, int start, int length) throws SAXException {... } };
private static class MyHandler extends DefaultHandler { private int bookCount = 0; private List titles = new ArrayList (); private boolean book = false; private boolean title = false; public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {... } public void endElement(String uri, String localName, String qName) throws SAXException {... } public void characters(char[] ch, int start, int length) throws SAXException {... }
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals("book")) { bookCount++; book = true; } else if(qName.equals("title")) { title = true; } public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equals("book")) book = false; else if(qName.equals("title")) title = false; } public void characters(char[] ch, int start, int length) throws SAXException { if(book && title) { String title = new String(ch, start, length); titles.add(title); }
SAXParser sax = SAXParserFactory.newInstance().newSAXParser(); MyHandler handler = new MyHandler(); sax.parse("books3.xml", handler); int bookCount = handler.getBookCount(); List titles = handler.getTitles(); System.out.println(bookCount); System.out.println(titles);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse("books3.xml"); Element root = doc.getDocumentElement(); String rootName = root.getNodeName(); System.out.println("Element główny: " + rootName); NodeList bookNodeList = root.getElementsByTagName("book"); int n = bookNodeList.getLength(); System.out.println("Liczba książek: " + n);
NodeList bookNodeList = root.getElementsByTagName("book"); int n = bookNodeList.getLength(); for(int i=0; i<n; i++) { Node bookNode = bookNodeList.item(i); NodeList childNodes = bookNode.getChildNodes(); for(int j=0; j<childNodes.getLength(); j++) { Node node = childNodes.item(j); if(node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("title")) { String title = node.getTextContent(); System.out.println(title); }
@XmlType(name = "book") public class Book { private String id; private String title; private String author; private String isbn; private Integer year; private String publisher; private Integer public String getId() { return id; } public void setId(String id) { this.id = id; }
@XmlRootElement(name = "books") public class BookList { private List bookList = new ArrayList = "book") public List getBookList() { return bookList; } public void setBookList(List bookList) { this.bookList = bookList; }
JAXBContext context = JAXBContext.newInstance(BookList.class); Unmarshaller um = context.createUnmarshaller(); FileReader fr = new FileReader("books.xml"); BookList bl = (BookList) um.unmarshal(fr); fr.close(); for(Book b : bl.getBookList()) System.out.println(b.getId() + " " + b.getTitle());
XML Path Language Adresowanie części dokumentu XML Przykłady ścieżek Element:/books/book/title
/books/book/title //person //person [ profile/age<25 and profile/gender='female' ] / name
Funkcje operujące na liczbach: fn:abs(...) fn:round(...), fn:floor(...), fn:ceiling(...) fn:avg(…), fn:min(…), fn:max(…) Operacje na łańcuchach tekstowych: fn:concat(string1, string2) fn:substring(string, start, length) fn:string-length(...) fn:lower-case(...), fn:upper-case(...) fn:contains(string1, string2), fn:starts-with(string1, string2)
//book[ starts-with(title, "Java") ] //book[ contains(title, "Java") ]/title //book[ count(//author)>1 ]/title //book[ string-length(title)>100 ]/title
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse("test100k.xml"); XPath xpath = XPathFactory.newInstance().newXPath(); String name = doc); String card = xpath.evaluate("//person[name='Nagasaki']/creditcard", doc);
String expr1 = "//person[profile/age<25 and profile/gender='female']/name"; NodeList nodes = (NodeList) xpath.evaluate(expr1, doc, XPathConstants.NODESET); for(int i=0; i<nodes.getLength(); i++) { Node n = nodes.item(i); System.out.println(n.getTextContent()); }
String expr2 = "//person[profile/age<25 and profile/gender='female']"; NodeList nodes2 = (NodeList) xpath.evaluate(expr2, doc, XPathConstants.NODESET); for(int i=0; i<nodes2.getLength(); i++) { Node n = nodes2.item(i); String name = xpath.evaluate("name", n); String age = xpath.evaluate("profile/age", n); String = xpath.evaluate(" address", n); System.out.println(name + ", " + age + ", " + ); }
Transformacje XSLT
XSL Transformations Język przekształceń dokumentów XML Tłumaczenie dokumentu XML z jednego formatu na inny Arkusz XSLT „Przepis” na transformację Zbudowany z reguł Wykorzystanie XPath
Helion Onepress
<xsl:stylesheet version="1.0„ xmlns:xsl=" <xsl:apply-templates select="//ksiazka[(marka='1' or marka='2') and typ='1' and status='1']" />...
... Helion Onepress...