Τι είναι αυτό το εργαλείο;
Η XPath (XML Path Language) είναι ένα πρότυπο του W3C για την πλοήγηση και την επιλογή κόμβων — στοιχείων, χαρακτηριστικών, κειμένου — μέσα σε ένα έγγραφο XML χρησιμοποιώντας συμπαγή σύνταξη τύπου διαδρομής, π.χ. η `//book[price>30]/title` επιλέγει κάθε `<title>` του οποίου το αδελφό στοιχείο `<price>` είναι μεγαλύτερο από 30, οπουδήποτε στο έγγραφο. Χρησιμοποιείται από φύλλα στυλ XSLT, εργαλεία επικύρωσης XML, εργαλεία web scraping, πλαίσια αυτοματισμού προγράμματος περιήγησης (Selenium, Playwright) και πολλές βιβλιοθήκες XML διαφόρων γλωσσών προγραμματισμού.
Η τρέχουσα έκδοση που υλοποιείται από όλα τα κύρια προγράμματα περιήγησης — Chrome, Firefox, Safari, Edge — είναι η XPath 1.0, η αρχική σύσταση του W3C του 1999. Αυτό το εργαλείο χρησιμοποιεί ακριβώς αυτή τη φυσική μηχανή μέσω του API `document.evaluate()` του προγράμματος περιήγησης, οπότε τα αποτελέσματα εδώ ταιριάζουν με αυτά που θα παίρνατε από τα εργαλεία προγραμματιστή του προγράμματος περιήγησης ή από οποιαδήποτε JavaScript εκτελείται σε πρόγραμμα περιήγησης. Δεν υλοποιεί τις μεταγενέστερες προδιαγραφές XPath 2.0/3.0/3.1 (αυτές προσθέτουν λειτουργίες όπως `for`, ακολουθίες και ταίριασμα με regex) — δείτε τις Συχνές Ερωτήσεις για το τι σημαίνει αυτό στην πράξη.
Μια έκφραση μπορεί να επιστρέψει έναν από δύο τύπους αποτελέσματος: ένα σύνολο κόμβων (μηδέν ή περισσότερα στοιχεία, χαρακτηριστικά ή κόμβους κειμένου που ταιριάζουν, τα οποία αυτό το εργαλείο σειριοποιεί και παραθέτει ένα ανά γραμμή με πλήθος), ή μια βαθμωτή τιμή — έναν αριθμό, μια συμβολοσειρά ή μια δυαδική τιμή — όταν η ίδια η έκφραση υπολογίζει μια τιμή, όπως η `count(//book)` ή η `//book[1]/title = 'Dune'`.
Γιατί να το χρησιμοποιήσετε;
- Αποσφαλματώστε μια έκφραση XPath πριν τη σκληροκωδικοποιήσετε σε ένα εργαλείο web scraping, σε ένα test Selenium/Playwright ή σε ένα φύλλο στυλ XSLT.
- Ελέγξτε γρήγορα αν μια δεδομένη έκφραση XPath επιλέγει τον κόμβο που περιμένετε από ένα πραγματικό δείγμα XML/HTML.
- Δείτε το ακριβές πλήθος αντιστοιχιών και τη σειριοποιημένη έξοδο αντί να μαντεύετε από τον κώδικα.
- Λάβετε άμεσα, ευανάγνωστα σφάλματα για κακοσχηματισμένο XML ή μη έγκυρη σύνταξη XPath αντί για ένα δυσνόητο stack trace.
- 100% από την πλευρά του πελάτη: το XML και η έκφρασή σας δεν φεύγουν ποτέ από το πρόγραμμα περιήγησής σας.
Πώς χρησιμοποιείται
- Επικολλήστε ή επεξεργαστείτε το XML (ή HTML) σας στο πλαίσιο εισαγωγής — ένα δείγμα εγγράφου βιβλιοπωλείου είναι προσυμπληρωμένο ώστε να το δείτε να λειτουργεί αμέσως.
- Πληκτρολογήστε μια έκφραση XPath στο πεδίο έκφρασης, ή επεξεργαστείτε το προσυμπληρωμένο παράδειγμα.
- Κάντε κλικ στο "Αξιολόγηση" (ή πατήστε Enter στο πεδίο έκφρασης).
- Διαβάστε τους κόμβους που ταιριάζουν παρακάτω, με το πλήθος στην κορυφή· τα βαθμωτά αποτελέσματα (αριθμοί, συμβολοσειρές, δυαδικές τιμές) εμφανίζονται απευθείας.
- Αν το XML ή η έκφραση δεν είναι έγκυρα, ένα συγκεκριμένο μήνυμα σφάλματος αντικαθιστά τα αποτελέσματα.
Παράδειγμα
Είσοδος
XML:
<bookstore>
<book><title>The Great Gatsby</title><price>12.99</price></book>
<book><title>Learning XPath</title><price>34.50</price></book>
<book><title>Dune</title><price>45.00</price></book>
</bookstore>
XPath: //book[price>30]/titleΈξοδος
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Μόνο 2 από τα 3 βιβλία έχουν τιμή πάνω από 30, οπότε επιστρέφονται ακριβώς 2 στοιχεία <title> — το τρίτο βιβλίο (Gatsby, 12,99$) αποκλείεται σωστά.
XPath εναντίον επιλογέων CSS με μια ματιά
Και οι δύο γλώσσες επιλέγουν κόμβους από ένα έγγραφο, αλλά λύνουν διαφορετικά προβλήματα. Χρησιμοποιήστε αυτόν τον πίνακα για να επιλέξετε το κατάλληλο εργαλείο για μια συγκεκριμένη επιλογή.
| Δυνατότητα | XPath | Επιλογείς CSS |
|---|---|---|
| Επιλογή βάσει ετικέτας/κλάσης/ID προς τα κάτω | Ναι | Ναι — και συνήθως πιο γρήγορα |
| Επιλογή βάσει ορατού/κειμενικού περιεχομένου | Ναι — `contains(text(),'x')` | Όχι |
| Διάτρεξη προς τα πάνω σε γονέα/πρόγονο | Ναι — `//div[span]/..` | Όχι (η `:has()` είναι μια νεότερη μερική εξαίρεση) |
| Συγκρίσεις τιμών αδελφών στοιχείων (π.χ. `price>30`) | Ναι | Όχι |
| Λειτουργεί εκτός προγράμματος περιήγησης (εργαλεία XML από την πλευρά διακομιστή, XSLT) | Ναι | Όχι — οι επιλογείς CSS είναι ειδικοί για πρόγραμμα περιήγησης/DOM |
Σχετικά εργαλεία
Δουλεύετε με δομημένες μορφές δεδομένων; Αυτά τα εργαλεία ταιριάζουν καλά με τη δοκιμή XPath.
Συχνές ερωτήσεις
Σε τι χρησιμεύει η XPath;
Η XPath επιλέγει κόμβους — στοιχεία, χαρακτηριστικά ή κείμενο — από ένα έγγραφο XML ή HTML χρησιμοποιώντας σύνταξη διαδρομής. Είναι η γλώσσα επιλογής πίσω από τους μετασχηματισμούς XSLT, πολλά εργαλεία επικύρωσης XML, και χρησιμοποιείται ευρέως στο web scraping και στην αυτοματοποίηση δοκιμών προγράμματος περιήγησης (Selenium, Playwright, Cypress) για τον εντοπισμό στοιχείων σε μια σελίδα, ειδικά όταν οι επιλογείς CSS από μόνοι τους δεν μπορούν να εκφράσουν την απαιτούμενη συνθήκη.
XPath εναντίον επιλογέων CSS — τι να χρησιμοποιήσω;
Επικαλύπτονται αλλά δεν είναι ισοδύναμα. Η XPath μπορεί να επιλέξει ένα γονικό στοιχείο με βάση το περιεχόμενο ενός θυγατρικού (`//div[span='Total']`), να διατρέξει προς τα πάνω σε προγόνους και να επιλέξει βάσει ορατού κειμένου (`//button[contains(text(),'Submit')]`) — οι επιλογείς CSS δεν μπορούν να κινηθούν προς τα πάνω στο δέντρο και δεν μπορούν καθόλου να ταιριάξουν με βάση το περιεχόμενο κειμένου. Αν απλώς επιλέγετε βάσει ετικέτας, κλάσης ή ID κινούμενοι προς τα κάτω μέσα στο έγγραφο, οι επιλογείς CSS είναι απλούστεροι στη σύνταξη και γενικά πιο γρήγοροι στην αξιολόγηση. Στραφείτε στην XPath ειδικά όταν χρειάζεστε "επιλογή του γονέα αυτού του κειμένου" ή "επιλογή βάσει του τι λέει το στοιχείο", όχι απλώς του πώς έχει ετικέτα ή κλάση.
Υποστηρίζει αυτό το εργαλείο συναρτήσεις XPath 2.0 ή 3.0;
Όχι — ούτε κανένα πρόγραμμα περιήγησης τις υποστηρίζει. Τα προγράμματα περιήγησης υλοποιούν την XPath 1.0 (τη σύσταση του W3C του 1999) μέσω της `document.evaluate()`, και αυτό το εργαλείο χρησιμοποιεί ακριβώς αυτή τη φυσική μηχανή, οπότε είναι ακριβές σε σχέση με ό,τι θα παίρνατε εκτελώντας την ίδια έκφραση στα εργαλεία προγραμματιστή του προγράμματος περιήγησης ή σε JavaScript. Συναρτήσεις και δυνατότητες που εισήχθησαν στην XPath 2.0/3.0/3.1 (όπως εκφράσεις `for`, ακολουθίες ή η `matches()` με regex) δεν είναι διαθέσιμες εδώ — λειτουργούν μόνο συναρτήσεις της έκδοσης 1.0 όπως οι `contains()`, `starts-with()`, `substring()`, `count()`, `position()` και `last()`.
Ποιες συνηθισμένες εκφράσεις XPath πρέπει να γνωρίζω;
Η `//tag` επιλέγει κάθε `<tag>` οπουδήποτε στο έγγραφο. Η `//tag[@attr='value']` επιλέγει στοιχεία `<tag>` των οποίων το χαρακτηριστικό `attr` ισούται με `value`. Η `//tag[contains(text(),'x')]` επιλέγει στοιχεία `<tag>` των οποίων το άμεσο κείμενο περιέχει το `x`. Η `//tag[1]` επιλέγει το πρώτο αδελφό στοιχείο `<tag>` σε κάθε γονέα. Η `//parent/child` επιλέγει στοιχεία `<child>` που είναι άμεσα θυγατρικά του `<parent>`. Η `count(//tag)` επιστρέφει έναν αριθμό αντί για σύνολο κόμβων.
Χειρίζεται αυτό το εργαλείο τους χώρους ονομάτων XML;
Υποστηρίζεται καθαρά μόνο η συνηθισμένη περίπτωση χωρίς χώρο ονομάτων, η οποία καλύπτει τη συντριπτική πλειοψηφία του χειρόγραφου ή scraped XML/HTML. Αν το έγγραφό σας δηλώνει έναν χώρο ονομάτων XML (π.χ. `xmlns="..."` στο ριζικό στοιχείο), η `document.evaluate` απαιτεί μια συνάρτηση resolver με επίγνωση χώρων ονομάτων που αντιστοιχίζει προθέματα σε URI, κάτι που αυτό το απλό εργαλείο δεν ρυθμίζει — εκφράσεις πάνω σε XML με χώρο ονομάτων μπορεί να επιστρέψουν μηδέν αντιστοιχίες ακόμη κι όταν φαίνονται σωστές. Πρόκειται για γνωστό περιορισμό, όχι για σφάλμα: αφαιρέστε τη δήλωση του χώρου ονομάτων από το δείγμα σας, ή χρησιμοποιήστε τη συνάρτηση local-name() ως λύση παράκαμψης (π.χ. `//*[local-name()='title']`).
Αποστέλλεται το XML ή η έκφραση XPath μου σε κάποιον διακομιστή;
Όχι. Όλα εκτελούνται τοπικά χρησιμοποιώντας τον ενσωματωμένο `DOMParser` και τη `document.evaluate()` του προγράμματος περιήγησής σας — την ίδια μηχανή που το πρόγραμμα περιήγησής σας χρησιμοποιεί ήδη εσωτερικά. Τίποτα από όσα πληκτρολογείτε ή επικολλάτε δεν φεύγει ποτέ από τη συσκευή σας.