Как читать путь#
X4 использует ограниченный язык селекторов, а не весь XPath. Сверяйтесь с libraries/diff.xsd своей игры. Работа в XPath-редакторе сама по себе не доказывает допустимость селектора в X4.
| Запись | Значение |
|---|---|
/items/item |
Дочерние item корневого items |
[@id='a'] |
Отбор по атрибуту |
/@enabled |
Сам атрибут |
//item[@id='a'] |
Поиск на любой глубине; проверьте уникальность |
Исходный учебный документ#
Это вымышленные данные, не файл X4:
<items>
<item id="a" enabled="false" />
<item id="b" />
</items>Самостоятельный патч:
<diff>
<replace sel="/items/item[@id='a']/@enabled">true</replace>
<add sel="/items/item[@id='a']" type="@label">demo</add>
<remove sel="/items/item[@id='b']" />
<add sel="/items">
<item id="c" />
</add>
</diff>Ожидаемый результат#
<items>
<item id="a" enabled="true" label="demo" />
<item id="c" />
</items>replace меняет существующий атрибут; add type="@label" добавляет новый; remove удаляет b. Последний add вставляет c внутрь items. Это ожидаемое преобразование, не вывод журнала и не выполненный игровой тест.
Частые ошибки#
Проверяйте одно совпадение для каждой операции. replace всего элемента удалит прежние дочерние узлы вместе с ним. Для новой пары атрибут/значение у add выбирайте элемент через sel, а имя атрибута через type.
Не рассчитывайте на contains(), объединение | или произвольные выражения из полного XPath. Отсутствие совпадения сначала исследуйте; silent подавляет сообщение, но не исправляет путь. Дальше: реальный патч корабля, совместимость.