Підрозділ 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-вираз описує шлях по дереву вузлів. Основні конструкції:
| Вираз | Значення |
|---|---|
/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, якщо:
- Ви будуєте 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