OOP Course
Сьогодні

Підрозділ 19.6

XPath та вибір між JSON і XML

19.6. XPath та вибір між JSON і XML XPath XML Path Language — мова запитів до XML документа. Вона дозволяє точно адресувати будь який вузол або атрибут через вирази шляхи: /root/child , //descendant , @attribut

19.6. XPath та вибір між JSON і XML

XPath (XML Path Language) — мова запитів до XML-документа. Вона дозволяє точно адресувати будь-який вузол або атрибут через вирази-шляхи: /root/child, //descendant, @attribute, [predicat]. XPath вбудований у XmlDocument через SelectSingleNode/SelectNodes, а для XDocument доступний через розширення System.Xml.XPath.

Після опанування всього інструментарію розділу — природне запитання: коли обирати JSON, а коли XML? Відповідь залежить від домену, вимог до схеми, набору інструментів і команди. Розглянемо обидва аспекти.

XPath — синтаксис виразів та осі

Синтаксис XPath

XPath-вираз описує шлях по дереву вузлів. Основні конструкції:

Вираз Значення
/clinic Кореневий елемент <clinic>
/clinic/patient Прямі нащадки <patient>
//diagnosis Всі <diagnosis> на будь-якій глибині
@id Атрибут id поточного вузла
patient[1] Перший елемент <patient>
patient[last()] Останній <patient>
patient[@ward='Терапія'] <patient> з атрибутом ward="Терапія"
* Будь-який елемент
node() Будь-який вузол (включно з текстом)
.. Батьківський вузол
. Поточний вузол

XPath-осі

Осі дозволяють переміщатися по дереву у будь-якому напрямку:

Вісь Вирізка
child:: Прямі дочірні (за замовчуванням)
descendant:: Всі нащадки (рекурсивно)
parent:: Батьківський вузол
ancestor:: Всі батьки вгору до кореня
following-sibling:: Сусіди після поточного вузла
preceding-sibling:: Сусіди перед поточним вузлом
attribute:: Атрибути (скорочення: @)
self:: Сам вузол

XPath-функції

count(nodes)          — кількість вузлів у наборі
normalize-space(str)  — прибрати зайві пробіли
contains(str, sub)    — перевірка входження підрядка
starts-with(str, pre) — перевірка початку рядка
string-length(str)    — довжина рядка
not(expr)             — логічне заперечення
position()            — позиція вузла в батьківському наборі
last()                — кількість вузлів в поточному наборі

XPath у XmlDocument

XPath у XDocument (System.Xml.XPath)

XPathNavigator для складної навігації

XPathExpression дозволяє скомпілювати XPath один раз і виконувати багаторазово без повторного парсингу — важливо при роботі з великими документами або частими запитами.

JSON vs XML — порівняльний аналіз

JSON vs XML — коли що обирати

Правила вибору формату

Обирайте JSON, якщо:

  • Ви будуєте REST API або SPA-клієнт — JSON є індустріальним стандартом HTTP
  • Дані — масиви, вкладені об'єкти без метаданих-атрибутів
  • Потрібна максимальна стислість і простота парсингу у браузері
  • Команда використовує JavaScript/TypeScript або мобільних клієнтів

Обирайте XML, якщо:

  • Обмін з медичними системами: HL7 v2, HL7 v3, CDA, FHIR R2/R3 — там XML
  • Потрібні атрибути як першокласний синтаксис (не поле-обгортка)
  • SOAP-сервіси або WCF (корпоративний legacy)
  • Документи з коментарями та просторами імен (XML схема обов'язкова)
  • Office Open XML (.docx, .xlsx, .pptx) — це ZIP з XML всередині
  • Конфіг .NET Framework: Web.config, App.config

Обидва прийнятні, коли:

  • FHIR R4 підтримує і JSON, і XML — обирайте за можливостями клієнта
  • Для зберігання у БД: JSON підтримується у PostgreSQL, MySQL, SQL Server нативно; XML — через XML-тип або nvarchar

Підсумок розділу 19

Розроблено Tomka Yurii · © 2026 ·