Signatur
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
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);
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());
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));
// Wichtig · Fallstricke
- Nur Parameter:
clearParameters()entfernt nicht das importierte Stylesheet. Dafür istreset()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 liefertgetParameter()null, nicht den Standardwert aus dem Stylesheet. Der Standardwert wird erst bei der Transformation ausgewertet. - Kompatibilität:
XSLTProcessorwird 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.