---
title: XML-Diff-Patches
summary: Den Ersetzungsumfang wählen: Attribut, Text, Element oder Dokumentwurzel.
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"]
---
## Was replace tatsächlich ersetzt
XML kennt keine Operation zum Ersetzen von Zeile 15: Zeilenumbrüche sind Formatierung. Der Selektor sel bestimmt den Umfang. Jede replace-Operation muss genau einen Knoten auswählen. Für jedes weitere Ziel ist eine eigene Operation nötig.
| Auswahl | Ersetzter Inhalt | Erhaltener Inhalt |
| --- | --- | --- |
| `/items/item[@id='a']/@enabled` | Der Wert des Attributs enabled | Andere Attribute und Kindknoten |
| `/items/item[@id='a']/label/text()` | Der Textknoten innerhalb von label | Das Element label und seine Attribute |
| `/items/item[@id='a']` | Das gesamte Element item | Geschwisterelemente; die alten Attribute und Kinder des ausgewählten item werden entfernt |
| `/items` | Das Wurzelelement mit seinem Inhalt | Nur Inhalt außerhalb der gewählten Wurzel; dies ist eine umfassende Ersetzung |
diff ist eine Liste von XML-Operationen beim Laden; replace ist eine davon. Die vollständige Dateisubstitution durch subst_ ist ein anderer Mechanismus. Ein gleicher Dateiname in einer Erweiterung bedeutet allein keine vollständige Ersetzung: Tabellen können Einträge zusammenführen. Siehe [ext_, subst_ und lose Dateien](wiki:extension-catalogs).
## Ursprüngliches Lerndokument
Dies sind fiktive Daten. Jedes folgende Beispiel wird unabhängig auf das ursprüngliche Dokument angewendet, nicht auf das Ergebnis des vorherigen. Die Beispiele erklären die Struktur und wurden nicht gesondert im Spiel ausgeführt.
```xml
```
## Nur ein Attribut ersetzen
```xml
true
```
Ergebnis: enabled wird true; label, price, andere Attribute und item b bleiben erhalten. Das Attribut muss bereits existieren. Ein neues Attribut wird mit add und type="@name" hinzugefügt.
## Text innerhalb eines Elements ersetzen
```xml
New name
```
Ergebnis: label enthält New name und behält lang="en". Ersetzt wird der gesamte ausgewählte Textknoten, keine Teilzeichenfolge. Ein leeres Element kann keinen Textknoten enthalten; gemischter Inhalt kann mehrere haben. Genau einen Treffer prüfen.
## Ein Element mit allen Kindern ersetzen
```xml
```
Erwartetes Dokument:
```xml
```
price fehlt, weil es im neuen item nicht enthalten ist. Vorherige Kinder bleiben nicht automatisch erhalten. Diese Ersetzung kann auch Änderungen anderer Mods innerhalb des ausgewählten Elements löschen.
## Das Wurzelelement ersetzen
```xml
```
Erwartetes Dokument:
```xml
```
Die alten items a und b werden mit der alten Wurzel entfernt. Ersetzt wird ein XML-Baum im verarbeiteten Dokument, weder rohe Dateibytes noch die Originaldatei auf dem Datenträger. Für einen einzelnen Wert ein engeres Ziel wählen; eine Wurzelersetzung erfordert alle nötigen Daten und Konfliktprüfungen.
## An einer echten X4-Datei prüfen
Der Pfad des Patches relativ zur Erweiterung bestimmt die Zieldatei. Daten der eigenen Version lesen, eine stabile ID finden und genau einen Treffer prüfen. Operationen laufen von oben nach unten; spätere Operationen sehen frühere Ergebnisse.
Kein Treffer bedeutet, dass das Ziel nicht gefunden wurde. Mehrere Treffer fordern keine Massenersetzung an. silent unterdrückt eine Meldung, korrigiert aber keinen Selektor. Die Selektorsprache ist eingeschränkt; das Schema diff.xsd der eigenen Installation prüfen.
Das wirksame XML vergleichen, anschließend Spieleffekt und Protokoll gesondert prüfen. Die obigen Beispiele sind kein Emulator des X4-Laders. Weiter mit [add, replace und remove gemeinsam](wiki:xpath-selectors), [einem Schiffspatch](wiki:editing-parameters) und [Kompatibilität](wiki:compatibility).