---
title: Parches diff XML
summary: Elige el alcance de la sustitución: atributo, texto, elemento o raíz del documento.
section: scripting
kind: guide
status: example
updated: 2026-10-27
tags: ["X4","modding","xml","patches"]
sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Anatomy%20of%20an%20extension/XML%20diff%20patching/","https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Anatomy%20of%20an%20extension/","https://datatracker.ietf.org/doc/html/rfc5261#section-4.4"]
---
## Qué sustituye realmente replace
XML no tiene una operación para sustituir la línea 15: los saltos de línea son formato. El selector sel determina el alcance. Cada operación replace debe seleccionar exactamente un nodo. Usa una operación distinta para cada destino.
| Selección | Contenido sustituido | Contenido conservado |
| --- | --- | --- |
| `/items/item[@id='a']/@enabled` | El valor del atributo enabled | Otros atributos y nodos secundarios |
| `/items/item[@id='a']/label/text()` | El nodo de texto dentro de label | El elemento label y sus atributos |
| `/items/item[@id='a']` | El elemento item completo | Los elementos hermanos; se eliminan los atributos y descendientes anteriores del item seleccionado |
| `/items` | El elemento raíz y su contenido | Solo el contenido fuera de la raíz seleccionada; es una sustitución amplia |
diff es una lista de operaciones XML aplicadas al cargar; replace es una de ellas. La sustitución completa de archivos mediante subst_ es otro mecanismo. Un nombre de archivo idéntico en una extensión no implica por sí solo reemplazo total: las tablas pueden combinar entradas. Consulta [ext_, subst_ y archivos sueltos](wiki:extension-catalogs).
## Documento didáctico original
Son datos ficticios. Aplica cada ejemplo siguiente de forma independiente al documento original, no al resultado del anterior. Los ejemplos explican la estructura; no se ejecutaron por separado en el juego.
```xml
```
## Sustituir solo un atributo
```xml
true
```
Resultado: enabled pasa a true; label, price, los demás atributos e item b se conservan. El atributo debe existir. Para añadir uno nuevo, usa add con type="@name".
## Sustituir texto dentro de un elemento
```xml
New name
```
Resultado: label contiene New name y conserva lang="en". Se sustituye todo el nodo de texto seleccionado, no una subcadena. Un elemento vacío puede no tener nodo de texto; el contenido mixto puede tener varios. Comprueba que haya exactamente una coincidencia.
## Sustituir un elemento y todos sus descendientes
```xml
```
Documento esperado:
```xml
```
price desaparece porque el nuevo item no lo contiene. Los descendientes anteriores no se conservan automáticamente. Esta sustitución también puede borrar cambios de otro mod dentro del elemento seleccionado.
## Sustituir el elemento raíz
```xml
```
Documento esperado:
```xml
```
Los antiguos items a y b desaparecen con la raíz anterior. Se sustituye un árbol XML del documento procesado, no los bytes del archivo ni el original en disco. Elige un destino más específico para cambiar un valor; sustituir la raíz requiere todos los datos necesarios y comprobar conflictos.
## Comprobar con un archivo real de X4
La ruta del parche relativa a la extensión determina el archivo de destino. Lee los datos de tu versión, busca un ID estable y comprueba que haya una sola coincidencia. Las operaciones se ejecutan de arriba abajo; las posteriores ven los resultados anteriores.
Cero coincidencias significa que no se encontró el destino. Varias coincidencias no solicitan una sustitución masiva. silent suprime un mensaje, pero no corrige el selector. El lenguaje de selectores está limitado; consulta el esquema diff.xsd de tu instalación.
Compara el XML efectivo y comprueba por separado el efecto en el juego y el registro. Los ejemplos anteriores no son un emulador del cargador de X4. Continúa con [add, replace y remove juntos](wiki:xpath-selectors), [un parche de nave](wiki:editing-parameters) y [compatibilidad](wiki:compatibility).