Start · Sprachen · JavaScript · Referenz · XSLTProcessor.clearParameters()

XSLTProcessor.clearParameters()

Methode

Entfernt alle mit <code>setParameter()</code> gesetzten Parameterwerte aus dem <code>XSLTProcessor</code>, sodass wieder die Standardwerte der <code>&lt;xsl:param&gt;</code>-Deklarationen gelten.

seit JavaScript Baseline: alle Browser (Chrome plant die Entfernun deprecated seit ja Kategorie: webapi

Signatur

XSLTProcessor.prototype.clearParameters()

Beschreibung

clearParameters() entfernt alle Parameterwerte, die zuvor mit XSLTProcessor.prototype.setParameter() gesetzt wurden. Danach verwendet das importierte Stylesheet bei der nächsten Transformation wieder die Standardwerte aus den <xsl:param>-Deklarationen, also den Wert aus dem select-Attribut oder aus dem Inhalt des Elements.

Die Methode ist praktisch, wenn Sie einen Prozessor für mehrere Transformationen mit jeweils anderen Parametern verwenden. Wenn Sie vor jedem Durchlauf clearParameters() aufrufen, bleiben keine Werte aus der vorherigen Transformation übrig. So erhalten Sie keine unerwarteten Ergebnisse, weil ein Parameter „hängen geblieben“ ist.

Wichtig: clearParameters() betrifft nur die Parameter. Das mit importStylesheet() geladene Stylesheet bleibt erhalten. Wenn Sie den Prozessor vollständig zurücksetzen wollen (Stylesheet und Parameter), verwenden Sie XSLTProcessor.prototype.reset().

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined).

Beispiele

Parameter entfernen und zum Standardwert zurückkehren

const xsltText = `<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="titel" select="'Standardtitel'"/>
  <xsl:template match="/">
    <h1><xsl:value-of select="$titel"/></h1>
  </xsl:template>
</xsl:stylesheet>`;

const parser = new DOMParser();
const xsl = parser.parseFromString(xsltText, "application/xml");
const xml = parser.parseFromString("<daten/>", "application/xml");

const processor = new XSLTProcessor();
processor.importStylesheet(xsl);

processor.setParameter(null, "titel", "Monatsbericht");
console.log(processor.transformToFragment(xml, document).textContent);

// Alle gesetzten Parameter entfernen
processor.clearParameters();
console.log(processor.getParameter(null, "titel"));
console.log(processor.transformToFragment(xml, document).textContent);
Monatsbericht null Standardtitel

Einen Prozessor für mehrere Berichte wiederverwenden

const xsltText = `<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="abteilung" select="'Alle'"/>
  <xsl:param name="jahr" select="'2024'"/>
  <xsl:template match="/">
    <p><xsl:value-of select="concat($abteilung, ' / ', $jahr)"/></p>
  </xsl:template>
</xsl:stylesheet>`;

const parser = new DOMParser();
const processor = new XSLTProcessor();
processor.importStylesheet(parser.parseFromString(xsltText, "application/xml"));
const xml = parser.parseFromString("<berichte/>", "application/xml");

const renderBericht = (params = {}) => {
  // Werte aus dem letzten Durchlauf verwerfen
  processor.clearParameters();
  for (const [name, wert] of Object.entries(params)) {
    processor.setParameter(null, name, wert);
  }
  return processor.transformToFragment(xml, document).textContent;
};

console.log(renderBericht({ abteilung: "Vertrieb", jahr: "2023" }));
console.log(renderBericht({ abteilung: "Technik" }));
console.log(renderBericht());
Vertrieb / 2023 Technik / 2024 Alle / 2024

Unterschied zwischen clearParameters() und reset()

const parser = new DOMParser();
const xsl = parser.parseFromString(`<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="gruss" select="'Hallo'"/>
  <xsl:template match="/"><b><xsl:value-of select="$gruss"/></b></xsl:template>
</xsl:stylesheet>`, "application/xml");
const xml = parser.parseFromString("<x/>", "application/xml");

const processor = new XSLTProcessor();
processor.importStylesheet(xsl);
processor.setParameter(null, "gruss", "Servus");

processor.clearParameters(); // Stylesheet bleibt erhalten
console.log(processor.transformToFragment(xml, document).textContent);

processor.reset(); // Stylesheet und Parameter werden entfernt
console.log(processor.transformToFragment(xml, document));
Hallo null (oder Fehler, je nach Browser – kein Stylesheet mehr importiert)

// Wichtig · Fallstricke

  • Nur Parameter: clearParameters() entfernt nicht das importierte Stylesheet. Dafür ist reset() zuständig.
  • Einzelne Parameter: Wenn Sie nur einen bestimmten Parameter entfernen wollen, verwenden Sie removeParameter(namespaceURI, localName) statt alle Parameter zu löschen.
  • Rückgabe von getParameter(): Nach dem Löschen liefert getParameter() null, nicht den Standardwert aus dem Stylesheet. Der Standardwert wird erst bei der Transformation ausgewertet.
  • Kompatibilität: XSLTProcessor wird von allen gängigen Browsern unterstützt, aber nicht von Node.js. Google hat angekündigt, XSLT künftig aus Chrome zu entfernen, und andere Browser erwägen das ebenfalls. Für neue Projekte sollten Sie deshalb Alternativen einplanen, zum Beispiel serverseitiges XSLT oder eine JavaScript-Bibliothek.
  • Browser unterstützen nur XSLT 1.0. Funktionen aus XSLT 2.0 oder 3.0 stehen nicht zur Verfügung.