Бұл құрал не істейді?
XPath (XML Path Language) — XML құжатының ішіндегі түйіндерді (элементтерді, атрибуттарды, мәтінді) қысқа жол тәрізді синтаксис арқылы шарлау мен таңдауға арналған W3C стандарты, мысалы, `//book[price>30]/title` құжаттың кез келген жерінде `price` тектесі 30-дан үлкен болатын әрбір `<title>` элементін таңдайды. Оны XSLT стильдерінде, XML валидациялау құралдарында, веб-скреперлерде, браузерді автоматтандыру фреймворктерінде (Selenium, Playwright) және көптеген бағдарламалау тілдерінің XML кітапханаларында қолданады.
Әрбір негізгі браузерде — Chrome, Firefox, Safari, Edge — іске асырылған ағымдағы нұсқа XPath 1.0, яғни 1999 жылғы бастапқы W3C ұсынымы. Бұл құрал дәл сол жергілікті қозғалтқышты браузердің `document.evaluate()` API арқылы пайдаланады, сондықтан мұндағы нәтижелер браузердің DevTools құралынан немесе браузерде жұмыс істейтін кез келген JavaScript-тен алынған нәтижелерге сәйкес келеді. Ол кейінгі XPath 2.0/3.0/3.1 спецификацияларын (олар `for`, тізбектер және регулярлы өрнектермен сәйкестендіру сияқты функцияларды қосады) іске асырмайды — бұл нақты не білдіретінін FAQ бөлімінен қараңыз.
Өрнек екі түрлі нәтиженің бірін қайтара алады: түйіндер жиынын (нөл немесе одан да көп сәйкес келетін элементтер, атрибуттар немесе мәтін түйіндері, оларды бұл құрал бір жолға бір элементтен санымен бірге сериализациялап тізіп шығарады), немесе скалярлық мәнді — сан, жол немесе логикалық мән — өрнектің өзі `count(//book)` немесе `//book[1]/title = 'Dune'` сияқты мән есептегенде.
Оны неге пайдалану керек?
- XPath өрнегін веб-скреперге, Selenium/Playwright тестіне немесе XSLT стилі парағына қатты кодтап жазбас бұрын жөндеу үшін.
- Берілген XPath нақты XML/HTML үлгісінен күткен түйінді таңдай ма, жоқ па екенін жылдам тексеру үшін.
- Кодтан болжамдаудың орнына нақты сәйкестік санын және сериализацияланған нәтижені көру үшін.
- Түсініксіз стек іздерінің орнына дұрыс емес XML немесе жарамсыз XPath синтаксисі үшін бірден түсінікті қателерді алу үшін.
- 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>3 кітаптың тек 2-уінің бағасы 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 валидаторларының артындағы таңдау тілі, сондай-ақ веб-скрапинг пен браузерлік тестілеуді автоматтандыруда (Selenium, Playwright, Cypress) беттегі элементтерді табу үшін кеңінен қолданылады, әсіресе CSS селекторлары ғана қажетті шартты өрнектей алмағанда.
XPath пен CSS селекторлары — қайсысын қолдану керек?
Олар қиылысады, бірақ бірдей емес. XPath баланың мазмұны бойынша ата-анасын таңдай алады (`//div[span='Total']`), жоғары қарай тектес элементтерге өте алады және көрінетін мәтін бойынша таңдай алады (`//button[contains(text(),'Submit')]`) — CSS селекторлары ағашта жоғары қарай жүре алмайды және мәтіндік мазмұн бойынша мүлдем сәйкестендіре алмайды. Егер сіз тек тег, класс немесе идентификатор бойынша құжат бойымен төмен қарай таңдасаңыз, CSS селекторларын жазу оңайырақ және бағалау әдетте жылдамырақ. XPath-ты нақты "осы мәтіннің ата-анасын таңдау" немесе "элемент не дейтінін көру" қажет болғанда, тек оның тегі немесе класы емес, қолданыңыз.
Бұл құрал XPath 2.0 немесе 3.0 функцияларын қолдай ма?
Жоқ — ешбір браузер де қолдамайды. Браузерлер `document.evaluate()` арқылы XPath 1.0-ді (1999 жылғы W3C ұсынымы) іске асырады, және бұл құрал дәл сол жергілікті қозғалтқышты пайдаланады, сондықтан ол браузердің DevTools немесе JavaScript-те сол өрнекті іске қосқандағы нәтижеге дәл сәйкес келеді. XPath 2.0/3.0/3.1-де енгізілген функциялар мен мүмкіндіктер (мысалы, `for` өрнектері, тізбектер немесе регулярлы өрнекпен `matches()`) қолжетімсіз — мұнда тек `contains()`, `starts-with()`, `substring()`, `count()`, `position()` және `last()` сияқты 1.0 функциялары жұмыс істейді.
Білуім керек кейбір жиі кездесетін XPath өрнектері қандай?
`//tag` құжаттың кез келген жеріндегі әрбір `<tag>` элементін таңдайды. `//tag[@attr='value']` `attr` атрибуты `value`-ге тең `<tag>` элементтерін таңдайды. `//tag[contains(text(),'x')]` тікелей мәтінінде `x` бар `<tag>` элементтерін таңдайды. `//tag[1]` әрбір ата-анадағы бірінші `<tag>` тектесін таңдайды. `//parent/child` `<parent>`-тың тікелей балалары болатын `<child>` элементтерін таңдайды. `count(//tag)` түйіндер жиынының орнына сан қайтарады.
Бұл құрал XML атаулар кеңістігін қолдай ма?
Тек атаулар кеңістігі жоқ жалпы жағдай ғана таза қолдау табады, бұл қолмен жазылған немесе скрапталған XML/HTML-дің басым көпшілігін қамтиды. Егер құжатыңыз XML атаулар кеңістігін жариялайтын болса (мысалы, түбір элементте `xmlns="..."`), `document.evaluate` префикстерді URI-ге сәйкестендіретін атаулар кеңістігін білетін резолвер функциясын қажет етеді, ал бұл қарапайым құрал оны орнатпайды — атаулар кеңістігі бар XML-ге қарсы өрнектер дұрыс көрінсе де нөл сәйкестік қайтаруы мүмкін. Бұл белгілі шектеу, қате емес: үлгіңізден атаулар кеңістігі жариялауын алып тастаңыз немесе шешім ретінде local-name() функциясын қолданыңыз (мысалы, `//*[local-name()='title']`).
Менің XML немесе XPath өрнегім серверге жіберіле ме?
Жоқ. Барлығы браузеріңіздің кіріктірілген `DOMParser` мен `document.evaluate()` көмегімен жергілікті орындалады — бұл браузеріңіз ішкі жағынан қолданатын қозғалтқыштың дәл өзі. Сіз теріп немесе қойған ешнәрсе құрылғыңыздан ешқашан шықпайды.