Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałZachariasz Buchowski Został zmieniony 11 lat temu
1
Projektowanie warstwy serwera Współpraca z XML
2
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 2 Plan wykładu Przykład pliku w formacie xml Przetwarzanie DOM Przetwarzanie SAX JAXB
3
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 3 Przykładowy opis xml Marek Odynca 34 Politechniki 30
4
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 4 xsd - przykład
5
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 5 Przetwarzanie SAX UzytkownikHandler handler = new UzytkownikHandler(); SAXParser sp = new SAXParser(); sp.setContentHandler(handler); sp.parse(getNazwa_pliku()+".xml"); if (!handler.getBledy().toString().equals("")) {.... }
6
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 6 Przetwarzanie SAX – handler (I) public UzytkownikHandler() { bledy.append(""); } public void startElement(String uri, String localName, String qName, Attributes attributes) { curr_name_tag = localName; otwarty_pusty = true; }
7
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 7 Przetwarzanie SAX – handler (II) public void endElement(String uri, String localName, String qName) { if (otwarty_pusty) { bledy.append("Pusty tag: "+curr_name_tag); } otwarty_pusty = false; }
8
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 8 Przetwarzanie SAX – handler (III) public void characters(char ch[], int start, int length) { String value = new String(ch, start, length); otwarty_pusty = false; }
9
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 9 Typ Node parentNode - węzeł nadrzędny nodeName - nazwa węzła nodeValue – wartość węzła nodeType – typ węzła attributes – atrybuty węzła lastChild – ostatni węzeł potomny firstChild – pierwszy węzeł potomny childNodes – lista węzłów potomnych
10
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 10 Metody klasy Node replaceChild(n,n) - zamienia istniejący węzeł potomny z podanym węzłem removeChild(n) - usuwa wskazany węzeł potomny insertBefore(n,n) - dołącza nowy węzeł jako węzeł potomny przed wskazanym węzłem cloneNode(b) – generuje kopię głęboką węzła appendChild(n) – dołącza nowy węzeł jako ostatni węzeł potomny
11
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 11 Typ NodeList Length() item(i)
12
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 12 Typ Dokument Typ Document modeluje całe drzewo DOM; wszystkie węzły drzewa są jego potomkami documentElement - element najwyższego poziomu w dokumencie getElementsByTagName(s) - zwraca listę węzłów o podanej nazwie createElement(s) - tworzy nowy element
13
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 13 Typ Element Typ Element modeluje węzeł reprezentujący parę znaczników XML tagName - nazwa węzła setAttributeNode(n) wstawia nowy węzeł atrybutu setAttribute(s,s) - ustawia nową wartość atrybutu removeAttribute(s) - usuwa wartość podanego atrybutu getAttributeNode(s) - zwraca węzeł podanego atrybutu getAttribute(s) - zwraca wartość podanego atrybutu
14
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 14 Przetwarzanie DOM (I) DOMParser dp = new DOMParser(); Node titleNode = null; NodeList titleNodeList = null; NodeList titleNodeList2 = null; XSDBuilder builder = new XSDBuilder(); dp.setXMLSchema((XMLSchema)builder.build(nazwaXsd)); p.setValidationMode(XMLParser.SCHEMA_VALIDATION); dp.setPreserveWhitespace (true); dp.parse(nazwaXml);
15
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 15 Przetwarzanie DOM (II) XMLDocument xmlDoc = dp.getDocument(); titleNodeList = xmlDoc.getElementsByTagName(Adres"); String ulica = titleNodeList.item(0).getFirstChild().getNodeValue(); titleNodeList2 = titleNodeList.item(0). getChildNodes(); for (int i=0; i<titleNodeList2.getLength(); j++) { titleNode = titleNodeList2.item(j); if (titleNode.getNodeName().equals(numer")) System.out.println(titleNode.getFirstChild().getNodeValue()); }
16
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 16 XSLT XSLProcessor xslProc = new XSLProcessor(); dp.parse(xslt_name); XMLDocument xmlDoc = dp.getDocument(); XSLStylesheet xsl = xslProc.newXSLStylesheet(xmlDoc); XMLDocumentFragment htmlDoc = slProc.processXSL(xsl, xmlDoc); htmlDoc.print(wyjscie2);
17
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 17 JAXB - Java Architecutre for XML Binding JAXB to standard definiujący dostęp do plików XML-owych z poziomu języka programowania. Filozofia JAXB jest trochę inna niż SAX i DOM: nie ma tu ogólnego interfejsu do parsowania plików, zamiast tego jest interfejs tworzony na podstawie DTD lub XML-Schemy. W praktyce wygląda to tak, że dostajemy kompilator schematów (lub dtd), który z tych schematów generuje klasy - dla każdego elementu XML powstaje jedna klasa.
18
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 18 Zalety w stosunku do SAX i DOM cały plik jest w pamięci - łatwiejszy dostęp do pliku JAXB umożliwia modyfikację i zapisywanie dokumentu do pliku. SAX jest przeznaczony tylko do odczytu nie ma narzutu na generyczność DOM-a, w pamięci jest tylko to co trzeba bardziej intuicyjny dostęp do dokumentu, zamiast metodami typu getFirstChild() wykonywane są metody tupu item.getImie(), nie trzeba znać struktury dokumentu
19
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 19 Podstawowe operacje udostępniane przez JAXB unmarshalling - zamiana pliku XML na obekty java weryfikacja - sprawdzenie poprawności pliku xml z XSD (DTD) marshalling - zamiana obiektów java na dokument XML
20
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 20 Generacja JAXB xjc nazwa_pliku.xsd
21
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 21 Unmarshalling (I) JAXBContext jc = JAXBContext.newInstance(domain.xml" ); Unmarshaller u = jc.createUnmarshaller(); TUzytkownik uzytkownik = (TUzytkownik) u.unmarshal( new FileInputStream(przyklad.xml")); TImie imie = uzytkownik.getImie();
22
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 22 Unmarshalling (II) JAXBElement uzytkownik = null; JAXBContext jc = JAXBContext.newInstance("domain.xml"); ObjectFactory objectFactory = new ObjectFactory(); Unmarshaller unmarshaller = jc.createUnmarshaller(); String plikXml = new String(contents, "UTF-8"); Reader readerXml = new StringReader(plikXml); uzytkownik = (JAXBElement ) unmarshaller.unmarshal(readerXml);
23
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 23 marshalling JAXBContext jc = JAXBContext.newInstance("domain.xml"); ObjectFactory objectFactory = new ObjectFactory(); StringWriter sw = new StringWriter(); marshaller = jc.createMarshaller(); marshaller.setProperty("jaxb.formatted.output", true); marshaller.setProperty("com.sun.xml.internal.bind. namespacePrefixMapper", new PrefixMapper()); marshaller.marshal(objectFactory. createUzytkownik(UzytkownikXML), sw);
24
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 24 Object Factory @XmlRegistry public class ObjectFactory { private final static QName _Uzytkownik_QNAME = new QName("http://www.biblioteka.pl/biblioteka", Uzytkownik"); @XmlElementDecl(namespace = http://www.biblioteka.pl/biblioteka", name = Uzytkownik") public JAXBElement createUzytkownik(UzytkownikXML value) { return new JAXBElement (_Uzytkownik_QNAME, UzytkownikXML.class, null, value); }
25
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 25 package-info @javax.xml.bind.annotation.XmlSchema( namespace = "http://www.biblioteka.pl/biblioteka", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED ) package domain.xml;
26
Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 26 UzytkownikXML @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "UzytkownikXML", propOrder = { "imie", "nazwisko", }) public class UzytkownikXML { String nazwisko; String imie; }
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.