如何用XPath批量修改7 Days To Die XML指定弹药的Stacknumber?
针对《7 Days To Die》Mod的XML批量修改方案
精确匹配单个Group属性值
如果目标物品的Group属性为单个独立值(如Ammo、Ammo/Weapons或Ranged Weapons),使用以下XPath即可精准筛选并修改堆叠数:
<set xpath="/items/item[starts-with(@name, 'ammo') and not(contains(@name, 'Bundle')) and (@Group='Ammo' or @Group='Ammo/Weapons' or @Group='Ranged Weapons')]/property[@name='Stacknumber']/@value">500</set>
各条件作用:
starts-with(@name, 'ammo'):锁定所有名称以ammo开头的物品not(contains(@name, 'Bundle')):排除名称含Bundle的物品(保留你已实现的排除逻辑)@Group='XXX' or @Group='YYY':仅保留Group属性完全匹配指定值的物品
处理逗号分隔的多值Group属性
若部分物品的Group属性是多个值用逗号分隔(如Ammo, Ranged Weapons),为避免误匹配类似AmmoExtended这类无关项,采用更严谨的写法:
<set xpath="/items/item[starts-with(@name, 'ammo') and not(contains(@name, 'Bundle')) and (contains(concat(',', normalize-space(@Group), ','), ',Ammo,') or contains(concat(',', normalize-space(@Group), ','), ',Ammo/Weapons,') or contains(concat(',', normalize-space(@Group), ','), ',Ranged Weapons,'))]/property[@name='Stacknumber']/@value">500</set>
关键逻辑说明:
normalize-space(@Group):去除Group值中的多余空格,兼容Ammo , Ranged Weapons这类不规范格式concat(',', ..., ','):在处理后的Group值前后添加逗号,确保匹配的是完整的分组名称(比如只会识别独立的Ammo,而非包含Ammo子串的其他值)
内容的提问来源于stack exchange,提问作者Stultusaur
相关产品推荐
相关产品推荐

