Zajęcia 3 Odczyt i zapis dokumentów XML


Sekcja: Odczyt dokumentu XML.
20. Dokument quotes.xml.
Dokument quotes.xml służy do zapamiętywania słynnych powiedzeń. Element jest
elementem typu root. Element posiada atrybut year służący do przechowywania daty
powiedzenia oraz dwa wewnętrzne elementy i . Element służy
do przechowywania frazy. Jest ona przechowywana wewnątrzel ementu. Element
służy do przechowywania imienia i nazwiska autora powiedzenia.
Przykład zaczerpnięty z www.designiso.com!



Hasta la vista, baby!
Arnold Schwarzenegger


This race is as tight as the rusted lug nuts on a '55
Ford.

Dan Rather


This race is hotter than a Times Square Rolex.
Dan Rather


Przykład 20: Dokument quotes.xml.
21. Walidacja dokumentu quotes.xml.
Aby mieć pewność, że dokument jest poprawnie zbudowany należy zbudować dla niego
arkusz dtd. Poniższy dokument xml zawiera wewnętrzny arkusz dtd.






]>


Hasta la vista, baby!
Arnold Schwarzenegger


This race is as tight as the rusted lug nuts on a '55
Ford.

Dan Rather


This race is hotter than a Times Square Rolex.
Dan Rather


Przykład 21: Walidacja dokumentu quotes.xml
22. Walidacja dokumentu za pomocą klasy DOMDocument.
Za pomocą klasy DOMDocument() możemy dokonać walidacji dokumentu posiadającego
wewnętrzny arkusz dtd. Należy utworzyć nowy obiekt typu DOMDocument.
Następnie za pomocą metody $dom->load() należy wczytać dokument xml. Przy pomocy
metody $dom->validate() moożemy dokonać sprawdzenie poprawności budowy dokumentu.
$dom = new DOMDocument();
$dom->load('quotes-dtd.xml');
echo 'Validation '.(($dom->validate()) ? 'succeeded.' : 'failed.');
?>
Przykład 22: Walidacja dokumentu za pomocą klasy DOMDocument.
23. Pobranie atrybutu z zerowego elementu.
Mająć pewność, że dokument jest poprawniw sformatowany możemy przystąpić do czytania
poszczególnych części dokumentu XML. Należy znalezć elementy o odpowiedniej nazwie
przy pomocy metody getElementByTagname('quote'). Następnie wybrać element zerowy przy
pomocy metody item(0). Posiadając adres odpowiedniego elementu pobieramy wartość jego
atrybutu za pomocą metody getAttribute('year'). Można to wszystko zapisać razem jak w
poniższym przykładzie.
$dom = new DOMDocument();
$dom->load('quotes.xml');
echo $dom->getElementsByTagname('quote')->item(0)->getAttribute('year');
?>
Przykład 23: Pobranie atrybutu z zerowego elementu.
24. Pobranie atrybutów ze wszystkich elementów.
Za pomocą pętli foreach pobieramy wszystkie atrybuty z pliku XML. następnie dla
każdego elementu czytamy jego atrybut za pomocą metody getAttribute('year').
$dom = new DOMDocument();
$dom->load('quotes.xml');
foreach ($dom->getElementsByTagname('quote') as $element)
{
$year = $element->getAttribute('year');
echo "$year
";
}
?>
Przykład 24: Pobranie atrybutów ze wszystkich elementów.
25. Pobranie elementów wewnętrznych.
Mamy już pobrane atrybuty wszystkich elementów . Musimy pobrać teksty z
elementów wenętrznych. Elementy wewnętrzne są potomkami węzła . Pobieramy je
za pomocą wywołania metody $element->childNodes umieszczonej w pętli foreach.
Ponieważ za pomocą metody pobieramy wszystkie węzły potomne (DOMCharacterData,
DOMNode, DOMElement) musimy z nich wybrać z nich te, które są obiektami klasy
DOMElement. Możemy to uczynić za pomocą funkcji bool is_a ( object $object , string
$class_name ), która pozwala nam posiadając obiekt stwierdzić czy jest on instancją klasy
DOMElement. Za pomocą funkcji string htmlspecialchars ( string $string) konwerujemy
znaki specjalne na format html.
$dom = new DOMDocument();
$dom->load('quotes.xml');
foreach ($dom->getElementsByTagname('quote') as $element)
{
$year = $element->getAttribute('year');
foreach (($element->childNodes) as $e)
{
if (is_a($e, 'DOMElement'))
{
if ($e->tagName == 'phrase') {$phrase = htmlspecialchars($e-
>textContent);}
elseif ($e->tagName == 'author') {$author = htmlspecialchars($e-
>textContent);}
}
}
echo "$year-$phrase-$author
";
}
?>
Przykład 25: Pobranie elementów wewnętrznych.
26. Wyświetlenie przeczytanego dokumentu.
Przeczytany dokument formatujemy i wyświetlamy jako listę html.
$dom = new DOMDocument();
$dom->load('quotes.xml');
echo '
    ';
    foreach ($dom->getElementsByTagname('quote') as $element)
    {
    $year = $element->getAttribute('year');
    foreach (($element->childNodes) as $e)
    {
    if (is_a($e, 'DOMElement'))
    {
    if ($e->tagName == 'phrase') {$phrase = htmlspecialchars($e-
    >textContent);}
    elseif ($e->tagName == 'author') {$author = htmlspecialchars($e-
    >textContent);}
    }
    }
    echo "
  • $author: $phrase ($year)
  • ";
    }
    echo '
';
?>
Przykład 26: Wyświetlenie przeczytanego dokumentu.
Sekcja: Zapis dokumentu XML.
27. Dokument quotes.xml.
Dokument quotes.xml służy do zapamiętywania słynnych powiedzeń. Element jest
elementem typu root. Element posiada atrybut year służący do przechowywania daty
powiedzenia oraz dwa wewnętrzne elementy i . Element służy
do przechowywania frazy. Jest ona przechowywana wewnątrz elementu. Element
służy do przechowywania imienia i nazwiska autora powiedzenia. Będziemy chcieli
dopisywać do dokumentu kolejne powiedzenia. Powiedzenia będą wprowadzane za pomocą
formularza HTML.



Hasta la vista, baby!
Arnold Schwarzenegger


This race is as tight as the rusted lug nuts on a '55
Ford.

Dan Rather


This race is hotter than a Times Square Rolex.
Dan Rather


Przykład 27: Dokument quotes.xml.
28. Formularz do wprowadzania nowych powiedzeń.
Budujemy w HTML formularz służący do wprowadzania nowych powiedzeń wraz z datą i
autorem powiedzenia.

XML

Słynne powiedzenia



Fraza

Kto to powiedział?

Kiedy?





Przykład 28: Formularz do wprowadzania nowych powiedzeń.
29. Skrypt obierający wprowadzone dane.
Aby dopisać do pliku XML wprowadzone przez formularz dane należy wykonać kilka
kroków:
Krok 1.
Tworzymy nową instancję klasy DOMDocument, i za pomocą metody load()wczytujemy
zawartość plikuXML. Następnie ustawiamy atrybut klasy DOMDocument na wartość true w
celu prawidłowego sformatowania tworzonego dokumentu.
Krok 2.
Za pomocą metody createElement('quote') tworzymy nowy element i za pomocą
metody setAttribute('year', $_POST['year']) ustawiamy wartość wprowadzonego atrybutu
.
Krok 3.
Za pomocą metody createElement('phrase') tworzymy nowy element . Za pomocą
metody createTextNode($_POST['quote']) dodajemy do elementu wprowadzony przez
formularz cytat.Następnie za pomocą metody appendChild($phraseText) dodajemy potomka
do elementu.
Krok 4.
Tak samo jak w kroku 3 tworzymy nowy element .
Krok 5.
Do elementu dodajemy elementy potomne i .
Krok 6.
Do dokumentu dodajemy nowy element i cały dokument zapisujemy w pliku
quotes.xml za pomocą metody save('quotes.xml'). Należy pamiętać, że podany powyżej
algorytm może być nieużyteczny w przypadku serwera www, ponieważ ze względu
bezpieczeństwa administratorzy serwerów ograniczają możliwości zapisu plików na serwerze
www.
// Krok 1
$dom = new DOMDocument();
$dom->load('quotes.xml');
$dom->formatOutput = true;
// Krok 2
$quote = $dom->createElement('quote');
$quote->setAttribute('year', $_POST['year']);
// Krok 3
$phrase = $dom->createElement('phrase');
$phraseText = $dom->createTextNode($_POST['quote']);
$phrase->appendChild($phraseText);
// Krok 4
$author = $dom->createElement('author');
$authorText = $dom->createTextNode($_POST['author']);
$author->appendChild($authorText);
// Krok 5
$quote->appendChild($phrase);
$quote->appendChild($author);
// Krok 6
$dom->documentElement->appendChild($quote);
$dom->save('quotes.xml');
?>
Przykład 29: Skrypt obierający wprowadzone dane.


Wyszukiwarka

Podobne podstrony:
Zajęcia 4 Dokumenty XML zapisywane w relacyjnej bazie danych
Dokumenty XML w relacyjnych bazach danych czyli wojna światów I
Wykład 12 XML NOWOCZESNY STANDARD ZAPISU I WYMIANY DOKUMENTU
Spróbuj odczytać Wesele Wyspiańskiego jako zapis świadomości
5 Mathcad Zapis i odczyt danych
zapis i odczyt z pliku macierz
Spróbuj odczytać Wesele Wyspiańskiego jako zapis świadom~4C4
02 xml dokumenty
02 xml dokumenty agencja
Zapis i odczyt
2 15 Zapis i odczyt danych (2)
zapis i odczyt pliku
Zajęcia 1
Zajecia6
hezjod teogonia, dokument elektroniczny

więcej podobnych podstron