Γραμματοσειρά XPath

Το XPath χρησιμοποιεί εκφράσεις διαδρομής για να επιλέξει κόμβους ή συλλογές κόμβων σε έγγραφα XML. Οι κόμβοι επιλέγονται ακολουθώντας τη διαδρομή (path) ή τα βήματα (steps).

XML παράδειγμα έγγραφου

Θα χρησιμοποιήσουμε αυτό το έγγραφο XML στα παραδείγματα μας.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

Επιλέξτε κόμβους

Το XPath χρησιμοποιεί εκφράσεις διαδρομής για να επιλέξει κόμβους σε έγγραφα XML. Οι κόμβοι επιλέγονται ακολουθώντας τη διαδρομή ή τα βήματα.

Κατωτέρω αναφέρονται οι πιο χρήσιμες εκφράσεις διαδρομής:

Εκφράσεις Περιγραφή
nodename Επιλέξτε όλους τους υποκείμενους κόμβους αυτού του κόμβου.
/ Επιλέξτε από τον ρίζα κόμβο.
// Επιλέξτε κόμβους από το έγγραφο που ταιριάζουν στην επιλογή, χωρίς να λάβει υπόψη τη θέση τους.
. Επιλέξτε τον τρέχοντα κόμβο.
.. Επιλέξτε τον γονικό κόμβο του τρέχοντος κόμβου.
@ Επιλέξτε ιδιότητες.

Παράδειγμα

Στην παρακάτω τάβλη, έχουμε καταγράψει μερικές εκφράσεις διαδρομής και τα αποτελέσματα τους:

Διαδρομές εξάλεψης Αποτελέσματα
bookstore Επιλέξτε όλους τους υποκείμενους κόμβους του στοιχείου bookstore.
/bookstore

Επιλέξτε το ρίζα στοιχείο bookstore.

Σημείωση: Αν η διαδρομή ξεκινά με τον καθοδηγό ( / ), τότε αυτή η διαδρομή πάντα αντιπροσωπεύει την απόλυτη διαδρομή μέχρι ένα στοιχείο!

bookstore/book Επιλέξτε όλα τα στοιχεία book που είναι υποστοιχεία του στοιχείου bookstore.
//book Επιλέξτε όλα τα υποστοιχεία book, ανεξάρτητα από τη θέση τους στο έγγραφο.
bookstore//book Επιλέξτε όλους τους στοιχεία book που είναι απογόνους του στοιχείου bookstore, ανεξάρτητα από τη θέση τους κάτω από το bookstore.
//@lang Επιλέξτε όλες τις ιδιότητες με όνομα lang.

Προτάγματα (Predicates)

Τα προτάγματα χρησιμοποιούνται για να βρεθούν συγκεκριμένοι κόμβοι ή κόμβοι που περιέχουν συγκεκριμένες τιμές.

Τα προτάγματα βρίσκονται εντός κουκλιών.

Παράδειγμα

Στην παρακάτω τаблицή, εμφανίζουμε μερικές διαδρομές εξάλεψης με προτάγματα και τα αποτελέσματα αυτών των διαδρομών:

Διαδρομές εξάλεψης Αποτελέσματα
/bookstore/book[1] Επιλέξτε το πρώτο στοιχείο book που είναι υποστοιχείο του στοιχείου bookstore.
/bookstore/book[last()] Επιλέξτε το τελευταίο στοιχείο book που είναι υποστοιχείο του στοιχείου bookstore.
/bookstore/book[last()-1] Επιλέξτε το δεύτερο τελευταίο στοιχείο book που είναι υποστοιχείο του στοιχείου bookstore.
/bookstore/book[position()<3] Επιλέξτε τα δύο πρώτα στοιχεία book που είναι υποστοιχεία του στοιχείου bookstore.
//title[@lang] Επιλέξτε όλα τα στοιχεία title που έχουν την ιδιότητα με όνομα lang.
//title[@lang='eng'] Επιλέξτε όλα τα στοιχεία title που έχουν την ιδιότητα lang με τιμή eng.
/bookstore/book[price>35.00] Επιλέξτε όλα τα στοιχεία book του στοιχείου bookstore, και τα στοιχεία price των οποίων η τιμή είναι μεγαλύτερη από 35.00.
/bookstore/book[price>35.00]/title Επιλέξτε όλα τα στοιχεία title του στοιχείου book στο στοιχείο bookstore, και τα στοιχεία price των οποίων η τιμή είναι μεγαλύτερη από 35.00.

Εξάλεψη άγνωστων κόμβων

Οι προσωποποιητικές διαδρομές XPath μπορούν να χρησιμοποιηθούν για την εξάλεψη άγνωστων στοιχείων XML.

Προσωποποιητικά Περιγραφή
* Συμβαίνει με οποιοδήποτε στοιχείο στοιχείου.
@* Συμβαίνει με οποιοδήποτε στοιχείο ιδιοτήτων.
node() Συμβαίνει με οποιοδήποτε τύπο κόμβου.

Παράδειγμα

Στην παρακάτω τаблицή, εμφανίζουμε μερικές διαδρομές εξάλεψης και τα αποτελέσματα αυτών των διαδρομών:

Διαδρομές εξάλεψης Αποτελέσματα
/bookstore/* Επιλέξτε όλους τους υποστοιχεία του στοιχείου bookstore.
//* Επιλέξτε όλα τα στοιχεία του εγγράφου.
//title[@*] Επιλέξτε όλα τα στοιχεία title με ιδιότητες.

Επιλογή πολλαπλών διαδρομών

Με τη χρήση του συναρτήματος '|', μπορείτε να επιλέξετε πολλαπλές διαδρομές.

Παράδειγμα

Στην παρακάτω τаблицή, εμφανίζουμε μερικές διαδρομές εξάλεψης και τα αποτελέσματα αυτών των διαδρομών:

Διαδρομές εξάλεψης Αποτελέσματα
//book/title | //book/price Επιλέξτε όλους τους στοιχεία title και price του στοιχείου book.
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。