---
title: Селекторы XML: add, replace и remove на примере
summary: Как читать sel, добавлять атрибут и проверять ожидаемый документ после патча.
section: scripting
kind: guide
status: example
updated: 2026-10-27
tags: ["XML","XPath","diff","sel","add","replace","remove"]
sources: ["https://chemodun.github.io/x4/modding-support/anatomy-of-an-extension/xml-diff-patching/","https://datatracker.ietf.org/doc/html/rfc5261"]
---
## Как читать путь
X4 использует ограниченный язык селекторов, а не весь XPath. Сверяйтесь с `libraries/diff.xsd` своей игры. Работа в XPath-редакторе сама по себе не доказывает допустимость селектора в X4.
| Запись | Значение |
| --- | --- |
| `/items/item` | Дочерние item корневого items |
| `[@id='a']` | Отбор по атрибуту |
| `/@enabled` | Сам атрибут |
| `//item[@id='a']` | Поиск на любой глубине; проверьте уникальность |
## Исходный учебный документ
Это вымышленные данные, не файл X4:
```xml
```
Самостоятельный патч:
```xml
true
demo
```
## Ожидаемый результат
```xml
```
`replace` меняет существующий атрибут; `add type="@label"` добавляет новый; `remove` удаляет b. Последний `add` вставляет c внутрь items. Это ожидаемое преобразование, не вывод журнала и не выполненный игровой тест.
## Частые ошибки
Проверяйте одно совпадение для каждой операции. `replace` всего элемента удалит прежние дочерние узлы вместе с ним. Для новой пары атрибут/значение у `add` выбирайте элемент через `sel`, а имя атрибута через `type`.
Не рассчитывайте на `contains()`, объединение `|` или произвольные выражения из полного XPath. Отсутствие совпадения сначала исследуйте; `silent` подавляет сообщение, но не исправляет путь. Дальше: [реальный патч корабля](wiki:editing-parameters), [совместимость](wiki:compatibility).