XML w.net Dominik Baś nr alb. 160345 Wrocław, 29 maja 2007
Przetwarzanie dokumentów XML API: SAX Simple Api for XML - przetwarzanie strumieniowe DOM - Document Object Model - odwzorowanie dokumentu XML w postaci drzewa
Klasy do obsługi XML w.net Przestrzeń nazw System.Xml Przetwarzanie strumieniowe: -XmlReader -XmlNodeReader -XmlTextReader -XmlValidatingReader -XmlWriter -XmlTextWriter DOM: -XmlNode -XmlDocument
Przykład użycia klasy XmlReader XmlReaderSettings settings = new XmlReaderSettings(); settings.validationtype i = ValidationType.Schema; i settings.schemas.add("http://mojschemat/", schemat.xsd"); using (XmlReader r = XmlReader.Create("plik.xml", settings)) { while (r.read()) if (r.nodetype == XmlNodeType.Element) Response.Write(r.Name); }
Przykład użycia klasy XmlWriter string ns = "http://biblioteka.com/biblo"; XmlWriterSettings settings = new XmlWriterSettings(); settings.indent = true; settings.indentchars = (" "); using (XmlWriter w = XmlWriter.Create("plik1.xml", settings)) { w.writestartdocument(); w.writestartelement("biblioteka"); w.writeattributestring("xmlns", "bibl", null, ns); w.writestartelement("ksiazka", ns); w.writeattributestring("stron", "258"); w.writeelementstring("autor", ns, "George Orwell"); w.writeelementstring( WriteElementString("tytul" tytul, ns, "Rok 1984"); w.writeendelement(); w.writeendelement(); w.writeenddocument(); w.flush(); }
Przykład użycia klasy XmlDocument const string ns = @"http://biblioteka.com/bibl"; const string prefix = "bibl"; XmlDocument doc = new XmlDocument(); XmlNode deklaracja = doc.createxmldeclaration("1.0", "UTF-8", null); doc.appendchild(deklaracja); XmlNode wezelbiblioteka = doc.createelement(prefix, "biblioteka", ns); doc.appendchild(wezelbiblioteka); XmlNode wezelksiazka = doc.createelement(prefix, "ksiazka", ns); XmlAttribute atrybutksiazka = doc.createattribute("stron"); atrybutksiazka.value tk = "258"; wezelksiazka.attributes.append(atrybutksiazka); wezelbiblioteka.appendchild(wezelksiazka); XmlNode wezelautor = doc.createelement(prefix, "autor", ns); wezelautor.appendchild(doc.createtextnode("george Orwell")); wezelksiazka.appendchild(wezelautor); XmlNode wezeltytul = doc.createelement(prefix, "tytul", ns); wezeltytul.appendchild(doc.createtextnode( CreateTextNode("Rok 1982")); wezelksiazka.appendchild(wezeltytul); doc.save("plik.xml");
Zawartość pliku wynikowego <?xml version="1.0" encoding="utf-8" standalone="yes"?> <biblioteka xmlns:bibl="http://biblioteka.com/bibl > <bibl:ksiazka stron="258"> <bibl:autor>george Orwell</bibl:Autor> <bibl:tytul>rok 1982</bibl:Tytul> </bibl:ksiazka> </biblioteka>
Modyfikacja dokumentu cons string ns = @"http://biblioteka.com/bibl"; const string prefix = "bibl"; XmlDocument doc = new XmlDocument(); doc.load("plik.xml"); XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable); NameTable); nsm.addnamespace("bibl", @"http://biblioteka.com/bibl"); XmlNodeList dolaczdo = doc.selectnodes("//bibl:ksiazka[bibl:tytul = 'Rok 1984']", nsm); foreach (XmlNode node in dolaczdo) { XmlNode wezeluwaga = doc.createelement(prefix, "uwaga", ns); wezeluwaga.innertext = "Chwilowo niedostępne"; node.appendchild(wezeluwaga); } doc.save("plik.xml"); l")
Zakres implementacji standardu XML SAX obsługuje standard XML 1.0 oraz przestrzenie nazw 1.0 DOM zaimplementowano w zakresie Level 1 Core oraz Level 2. Dodatkowo Microsoft umieścił własne rozszerzenia wykraczające poza standard W3.
Wady i zalety przetwarzanie strumieniowe Zalety: - Proste użycie - Małe zużycie pamięci - Szybkość Wady: - Brak swobodnego dostępu do elementów dokumentu - Brak wyszukiwania przy pomocy XPath - Brak możliwości ś i modyfikacji danych
Wady i zalety DOM Zalety: - Swobodny dostęp do wszystkich elementów - Reprezentacja dokumentu jako grupy obiektów - Możliwość modyfikacji dokumentu - Praca w trybie bezpołączeniowym Wady: - Cały dokument wczytywany do pamięci
Koniec Dziękuję za uwagę