[ Pobierz całość w formacie PDF ]
.W takim wypadku trzeba jakoś wskazać parserowi XML for Java gramatykę dokumentu XML, aby wiedział, które białe znaki może pominąć - najprościej jest użyć do tego DTD:<?xml version="1.0" encoding="iso-8859-2"?><!DOCTYPE SPOTKANIA [<!ELEMENT SPOTKANIA (SPOTKANIE*)><!ELEMENT SPOTKANIE (TYTUŁ,NUMER,TEMAT,DATA,OSOBY*)><!ELEMENT TYTUŁ (#PCDATA)><!ELEMENT NUMER (#PCDATA)><!ELEMENT TEMAT (#PCDATA)><!ELEMENT DATA (#PCDATA)><!ELEMENT IMIĘ (#PCDATA)><!ELEMENT NAZWISKO (#PCDATA)><!ELEMENT OSOBY (OSOBA*)><!ELEMENT OSOBA (IMIĘ,NAZWISKO)><!ATTLIST SPOTKANIETYP CDATA #IMPLIED><!ATTLIST OSOBASTATUS CDATA #IMPLIED>]><SPOTKANIA><SPOTKANIE TYP="nieformalne"><PRZEWODNICZĄCY>Ted Bond</PRZEWODNICZĄCY><TYTUŁ>XML w praktycznych zastosowaniach</TYTUŁ><NUMER>2079</NUMER><TEMAT>XML</TEMAT><DATA>6/1/2002</DATA><OSOBY><OSOBA STATUS="obecny"><IMIĘ>Edward</IMIĘ><NAZWISKO>Samson</NAZWISKO></OSOBA><OSOBA STATUS="nieobecny"><IMIĘ>Ernestyna</IMIĘ><NAZWISKO>Johnson</NAZWISKO></OSOBA><OSOBA STATUS="obecny"><IMIĘ>Betty</IMIĘ><NAZWISKO>Richardson</NAZWISKO></OSOBA></OSOBY></SPOTKANIE></SPOTKANIA>Teraz wywołujemy metodę parsera setIncludeIgnorableWhitespace z wartością false, co spowoduje wyłączenie pomijalnych białych znaków i nie musimy się już przejmować węzłami tekstowymi ze spacjami wykorzystanymi do zrobienia w dokumencie wcięć, dzięki czemu nasz kod może być krótszy:import org.w3c.dom.*;import org.apache.xerces.parsers.DOMParser;public class nav{public static void displayDocument(String uri){try {DOMParser parser = new DOMParser();parser.setIncludeIgnorableWhitespace(false);parser.parse(uri);Document document = parser.getDocument();display(document);} catch (Exception e) {e.printStackTrace(System.err);}}public static void display(Node node){Node meetingsNode = ((Document)node).getDocumentElement();Node meetingNode = textNode.getNextSibling();Node peopleNode = textNode.getPreviousSibling();Node personNode = textNode.getPreviousSibling();Node first_nameNode = textNode.getNextSibling();Node last_nameNode = textNode.getNextSibling();System.out.println("Trzecie nazwisko: " +first_nameNode.getFirstChild().getNodeValue() + ' '+ last_nameNode.getFirstChild().getNodeValue());}public static void main(String args[]){displayDocument("spotkania.xml");}}Modyfikowanie dokumentów XMLZ tabeli 8.4 wynika, że interfejs Node zawiera wiele metod pozwalających modyfikować dokumenty przez dodawanie bądź usuwanie węzłów.Do metod tych należą appendChild, insertBefore, removeChild, replaceChild i inne, wszystkie one pozwalają „w locie” modyfikować dokumenty XML.Jeśli jednak dokument modyfikujesz, konieczne będzie późniejsze jego zapisanie (nie mogliśmy zrobić tego w rozdziale 5 za pomocą JavaScriptu, zatem cały dokument wysyłaliśmy do skryptu ASP, który zwracał do przeglądarki nową postać dokumentu, który miał być wyświetlony).Pakiety XML for Java obsługują interfejs Serializer, który umożliwia zapisywanie dokumentów.Interfejs ten jednak nie jest dołączany do standardowych archiwów JAR, którymi się do tej pory posługiwaliśmy.Tak naprawdę łatwo można dokumenty normalnie zapisywać podczas ich drukowania.Zamiast używać metody System.out.println wypisującej dokument na konsoli, wystarczy zastosować obiekt FileWriter, który pozwala dokument zapisać na dysku.W tym przykładzie zakładamy, że wszystkie osoby z pliku zamówienia.xml (dokument ten znajdziesz na początku tego rozdziału) są doświadczonymi programistami.Wszystkim dodamy drugie imię XML w postaci elementu DRUGIE_IMIĘ.Nowy element będzie dzieckiem elementu IMIĘNAZWISKO, tak jak dotychczas stosowane IMIĘ i NAZWISKO:<IMIĘNAZWISKO><NAZWISKO>Jones</NAZWISKO><IMIĘ>Polly</IMIĘ><DRUGIE_IMIĘ>XML</DRUGIE_IMIĘ></IMIĘNAZWISKO>Dodanie elementu DRUGIE_IMIĘ do poszczególnych elementów IMIĘNAZWISKO jest proste - wystarczy w czasie parsowania elementu IMIĘNAZWISKO wywołać metodę createElement:case Node.ELEMENT_NODE: {if(node.getNodeName().equals("IMIĘNAZWISKO")) {Element middleNameElement = document.createElement("DRUGIE_IMIĘ");.Cały tekst dokumentu przechowywany jest w węzłach tekstowych, stosując metodę createTextNode tworzymy zatem nowy węzeł tekstowy, który będzie zawierał napis XML:case Node.ELEMENT_NODE: {if(node.getNodeName().equals("IMIĘNAZWISKO")) {Element middleNameElement = document.createElement("DRUGIE_IMIĘ");Text textNode = document.createTextNode("XML");.Następnie metodą appendChild możemy węzeł tekstowy dołączyć do nowego elementu:case Node.ELEMENT_NODE: {if(node.getNodeName().equals("IMIĘNAZWISKO")) {Element middleNameElement = document.createElement("DRUGIE_IMIĘ");Text textNode = document [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lo2chrzanow.htw.pl