1 / 26

Współpraca z XML

Współpraca z XML. Plan wykładu. P rzykład pliku w formacie xml P rzetwarzanie DOM P rzetwarzanie SAX JAXB. Przykładowy opis xml. <st:Uzytkownik> <st:Imie kod="16">Marek</st:Imie> <st:Adres> <st:Ulica kod=”93-161">Odynca</st:Ulica> <st:Numer>34</st:Numer> </st:Adres>

ziva
Download Presentation

Współpraca z XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Współpraca z XML

  2. Plan wykładu • Przykład pliku w formacie xml • Przetwarzanie DOM • Przetwarzanie SAX • JAXB Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  3. Przykładowy opis xml <st:Uzytkownik> <st:Imie kod="16">Marek</st:Imie> <st:Adres> <st:Ulica kod=”93-161">Odynca</st:Ulica> <st:Numer>34</st:Numer> </st:Adres> <st:Adres> <st:Ulica kod=”93-150">Politechniki</st:Ulica> <st:Numer>30</st:Numer> </st:Adres> </st:Uzytkownik> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  4. xsd - przykład <xsd:complexType name="tUzytkownik"> <xsd:sequence> <xsd:element name=”Imie" type="TImie"/> <xsd:element name=”Adres" type="TAdres" maxOccurs=”unbounded” minOccurs="0"/> </xsd:sequence> </xsd:complexType> <xsd:simpleContent name=”Timie”> <xsd:extension base="xsd:string"> <xsd:attribute name="kod" type="xsd:byte" use="required"/> </xsd:extension> </xsd:simpleContent> 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("")) { .... } 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; } 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; } 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; } 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 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  11. Typ NodeList • Length() • item(i) 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 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 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); 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()); } 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); 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. 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 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  20. Generacja JAXB xjc nazwa_pliku.xsd 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(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  22. Unmarshalling (II) JAXBElement<UzytkownikXML> 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<UzytkownikXML>) unmarshaller.unmarshal(readerXml); 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); 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<UzytkownikXML> createUzytkownik(UzytkownikXML value) { return new JAXBElement<UzytkownikXML> (_Uzytkownik_QNAME, UzytkownikXML.class, null, value); } 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; 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; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

More Related