--- 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).