Start · Sprachen · JavaScript · Referenz · XPathResult.booleanValue

XPathResult.booleanValue

Eigenschaft

Gibt den booleschen Wert eines XPath-Ergebnisses zurück, dessen <code>resultType</code> <code>XPathResult.BOOLEAN_TYPE</code> ist (schreibgeschützt).

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

XPathResult.booleanValue

Beschreibung

Die schreibgeschützte Eigenschaft booleanValue des XPathResult-Interfaces liefert das Ergebnis eines XPath-Ausdrucks als true oder false. Voraussetzung: Das Ergebnis hat den Typ XPathResult.BOOLEAN_TYPE (Wert 3).

Das ist praktisch, wenn man nur eine Ja/Nein-Frage an ein Dokument stellen will, etwa „Gibt es ein Element mit diesem Attribut?“ oder „Ist die Anzahl der Einträge größer als 10?“. Ausdrücke wie count(//li) > 10, boolean(//form[@id="login"]) oder not(//img[not(@alt)]) liefern direkt einen Wahrheitswert. Die Knoten muss man dafür nicht selbst durchlaufen.

Am sichersten fordert man den Typ beim Aufruf von document.evaluate() ausdrücklich mit XPathResult.BOOLEAN_TYPE an. Dann wandelt die XPath-Engine das Ergebnis selbst in einen Wahrheitswert um, wie mit der XPath-Funktion boolean(): Eine nicht leere Knotenmenge wird true, eine Zahl ungleich 0 und nicht NaN wird true, eine nicht leere Zeichenkette wird true.

Rückgabewert

Typ
boolean
Beschreibung
Der Wahrheitswert des ausgewerteten XPath-Ausdrucks. Hat das Ergebnis nicht den Typ BOOLEAN_TYPE, wird beim Lesen ein TypeError geworfen (in älteren Spezifikationen eine XPathException vom Typ TYPE_ERR).

Beispiele

Prüfen, ob ein Element existiert

// Gibt es ein Formular mit der ID "login"?
const result = document.evaluate(
  'boolean(//form[@id="login"])',
  document,
  null,
  XPathResult.BOOLEAN_TYPE,
  null
);

console.log(result.resultType === XPathResult.BOOLEAN_TYPE);
console.log(result.booleanValue);
true true // wenn das Formular vorhanden ist, sonst false

Barrierefreiheit prüfen: Haben alle Bilder ein alt-Attribut?

const hasAllAlts = (root = document) =>
  document.evaluate(
    'not(.//img[not(@alt)])',
    root,
    null,
    XPathResult.BOOLEAN_TYPE,
    null
  ).booleanValue;

if (!hasAllAlts()) {
  console.warn('Mindestens ein Bild hat kein alt-Attribut.');
} else {
  console.log('Alle Bilder haben ein alt-Attribut.');
}
Alle Bilder haben ein alt-Attribut.

Knotenanzahl in einem XML-Dokument vergleichen

const xml = `<warenkorb>
  <artikel preis="19.90"/>
  <artikel preis="5.00"/>
  <artikel preis="42.00"/>
</warenkorb>`;

const doc = new DOMParser().parseFromString(xml, 'application/xml');

// Liegt der Gesamtwert über 50?
const ueber50 = doc.evaluate(
  'sum(/warenkorb/artikel/@preis) > 50',
  doc,
  null,
  XPathResult.BOOLEAN_TYPE,
  null
).booleanValue;

console.log(`Versandkostenfrei: ${ueber50}`);
Versandkostenfrei: true

Fehler bei falschem Ergebnistyp abfangen

const res = document.evaluate(
  '//p',
  document,
  null,
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
  null
);

try {
  console.log(res.booleanValue);
} catch (err) {
  console.log(err.name); // Typ passt nicht
}
TypeError

// Wichtig · Fallstricke

  • Typprüfung: Wenn resultType nicht BOOLEAN_TYPE ist, wirft das Lesen von booleanValue einen Fehler. Das gilt auch bei ANY_TYPE, wenn die Engine einen anderen Typ gewählt hat. Deshalb am besten immer XPathResult.BOOLEAN_TYPE ausdrücklich anfordern oder vorher result.resultType === XPathResult.BOOLEAN_TYPE prüfen.
  • Umwandlung: Mit BOOLEAN_TYPE wird jede Knotenmenge in einen Wahrheitswert umgewandelt. //div liefert also true, sobald mindestens ein div existiert. Die Zeichenkette \"false\" ergibt ebenfalls true, weil sie nicht leer ist.
  • Namensräume: Bei XML- und XHTML-Dokumenten mit Namensräumen braucht evaluate() einen passenden namespaceResolver. Sonst findet der Ausdruck nichts, und das Ergebnis ist fälschlich false.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. In Node.js fehlt es ohne DOM-Implementierung (z. B. jsdom). Der Internet Explorer kannte document.evaluate nicht.
  • Leistung: Für einfache Existenzprüfungen im HTML-DOM sind querySelector() und ein Vergleich mit null meist schneller und besser lesbar.