Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

XML - morze możliwości - XPath, XPointer, XInclude

XPath

Przykładowy plik XML:

<?xml version="1.0" encoding="UTF-8"?>
<adress-book>
    <persons>
        <person id="1">
            <firstname>Jan</firstname>
            <lastname>Kowalski</lastname>
            <email>jan-kowalski@gmail.com</email>
            <phone>000 123 456</phone>
        </person>
        <person id="2">
            <firstname>Piotr</firstname>
            <lastname>Nowak</lastname>
            <email>piotr-nowak@gmail.com</email>
            <phone>000 123 456</phone>
        </person>
        <person id="3">
            <firstname>Paweł</firstname>
            <lastname>Kwiatkowski</lastname>
            <email>jan-kowalski@gmail.com</email>
            <phone>000 123 456</phone>
        </person>
    </persons>
</adress>

XPath jest językiem używanym do lokalizacji oraz pozyskiwania informacji z drzewa XML. Język ten jest również potrzebny podczas używania XPointer oraz XSLT

Do przetwarzania XML'a będziemy używać rozszerzenia DOM dla PHP.

Zacznijmy od podstawowego wyrażenia xpath. Pobierzemy wszystkie nazwiska z naszej książki adresowej:

<?php

$dom = new DOMDocument();

$dom->load('address-book.xml');

$xpath = new DOMXPath($dom);

$persons = $xpath->query("/address-book/persons/person/lastname");

foreach ($persons as $person) {
    echo $person->nodeValue."<br />";
}

Do wykonywania operacji korzystając z XPath służy klasa DOMXPath. Tworząc egzemplarz tej klasy przekazujemy obiekt DOM na którym chcemy operować, następnie używając metody query, która zwraca to o co prosiliśmy.

A o co prosiliśmy i jak prosić? W przykładzie powyżej napisaliśmy bardzo proste wyrażenie, które zwróciło nam tylko nazwiska (lastname) osób w książce. Poszczególne poziomy w dokumencie XML oddzielane są znakiem /. Jeżeli zapytanie zaczyna się od slasha oznacza to że wyszukiwanie ma zacząć się od najwyższego elementu.

Używając XPath możemy pisać bardziej szczegółowe zapytania. Wybrać nazwisko osoby o numerze id równym 1:

/address-book/persons/person[@id='1']/lastname

Dodający przy person nawias kwadratowy ograniczyliśmy wyszukiwanie tylko do elementów person które posiadają atrybut id o wartości równej 1. Znak @ przed id oznacza że uwzględniamy atrybuty nie elementy.

/address-book/persons/person[firstname='Paweł' and city='Warszawa']/lastname

Powyższe zapytanie zwróci nam nazwiska osób których imię to Paweł oraz miejsce zamieszkania to Warszawa. W tym zapytanie nie używaliśmy znaku @ ponieważ interesowały nas elementy a nie atrybuty.

Przedstawiłem tutaj podstawowe sposoby które najczęściej są używane podczas korzystanie z XPath. Po więcej informacji zapraszam do dokumentacji XPath.

XPointer

XPointer jest rozszerzeniem XPath i używa jego składni. Jest to język do adresowania fragmentów dokumentów XML. Został przewidziany do stosowania w adresach URI.

Przykładowe wyrażenia XPath używając XPointer wyglądają następująco:

xpointer(/address-book/persons/person[@id='1']/lastname)

Wspomniałem o używaniu w adresach URI. Tak przykładowo by wyglądało wyrażenie jako fragment URI:

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (2)
Opinia
Poniedziałek 05 Styczeń 2009 1:24:49 pm - Cypherq <cypherq_at_gmail.com>

1."<adress -book> <presons>" - chyba <persons>
2. (??) zamiast (''), bardzo ułatwia to czytanie kodu.
3. <adress -book> - <adress-book>
4. < ?xml - <?xml
5. < ?php$dom - <?php $dom ?

Jak również mnóstwo innych pomniejszych literówek. Artykuł wygląda na poprawiany na kolanie. Sprawdzał ktoś w ogóle przed publikacją to to? Merytorycznie może ciekawy, ale dbajcie tez o komfort czytelnika...

Gratulacje
Niedziela 04 Styczeń 2009 11:06:56 am - phpion

Świetny artykuł! Ciekawy i przystępnie napisany. Gratulacje dla autora!

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System