Start · Sprachen · JavaScript · Referenz · XPathResult.numberValue

XPathResult.numberValue

Eigenschaft

Schreibgeschützte Eigenschaft, die den Zahlenwert eines XPath-Ergebnisses liefert, wenn <code>resultType</code> gleich <code>XPathResult.NUMBER_TYPE</code> ist.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

XPathResult.numberValue

Beschreibung

Die Eigenschaft numberValue eines XPathResult-Objekts enthält das Ergebnis eines XPath-Ausdrucks, der eine Zahl liefert, z. B. count(//li), sum(//preis) oder number(//artikel/@menge). Das Ergebnis ist ein normaler JavaScript-number-Wert (IEEE-754-Gleitkommazahl).

Damit die Eigenschaft lesbar ist, muss resultType gleich XPathResult.NUMBER_TYPE (Wert 1) sein. Am sichersten fordert man diesen Typ beim Aufruf von document.evaluate() ausdrücklich an. Übergibt man ANY_TYPE (0), wählt der Browser den natürlichen Typ des Ausdrucks. Bei Funktionen wie count() ist das ebenfalls NUMBER_TYPE.

Typische Einsatzfälle sind Zählungen und Summen in HTML- oder XML-Dokumenten (etwa Daten, die per DOMParser geparst wurden), ohne dass man die Knoten selbst in JavaScript durchlaufen muss.

Rückgabewert

Typ
number
Beschreibung
Der Zahlenwert des ausgewerteten XPath-Ausdrucks. Kann auch NaN sein, wenn sich der Ausdruck nicht in eine Zahl umwandeln lässt.

Beispiele

Listeneinträge mit count() zählen

document.body.innerHTML = '<ul><li>A</li><li>B</li><li>C</li></ul>';

const result = document.evaluate(
  'count(//li)',
  document,
  null,
  XPathResult.NUMBER_TYPE,
  null
);

console.log(result.resultType === XPathResult.NUMBER_TYPE);
console.log(result.numberValue);
true 3

Summe von Preisen in einem XML-Dokument

const xml = `<bestellung>
  <artikel preis="19.99"/>
  <artikel preis="5.01"/>
  <artikel preis="10"/>
</bestellung>`;

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

const gesamt = doc.evaluate(
  'sum(//artikel/@preis)',
  doc,
  null,
  XPathResult.NUMBER_TYPE,
  null
).numberValue;

console.log(`Gesamt: ${gesamt.toFixed(2)} €`);
Gesamt: 35.00 €

Falschen Ergebnistyp abfangen

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

try {
  console.log(res.numberValue);
} catch (err) {
  console.log(err.name); // numberValue passt nicht zu diesem Ergebnistyp
}
TypeError

NaN bei nicht-numerischem Inhalt prüfen

document.body.innerHTML = '<span id="menge">viele</span>';

const wert = document.evaluate(
  'number(//span[@id="menge"])',
  document,
  null,
  XPathResult.NUMBER_TYPE,
  null
).numberValue;

console.log(Number.isNaN(wert) ? 'Keine gültige Zahl' : wert);
Keine gültige Zahl

// Wichtig · Fallstricke

  • Typfehler: Ist resultType nicht NUMBER_TYPE, wirft der Zugriff auf numberValue einen Fehler (in modernen Browsern einen TypeError, laut älterer Spezifikation eine XPathException mit dem Code TYPE_ERR).
  • Ausdruck muss eine Zahl liefern: Fordert man NUMBER_TYPE für einen Knoten-Ausdruck wie //li an, wird der Textinhalt des ersten Knotens in eine Zahl umgewandelt. Das ergibt oft NaN, statt dass die Knoten gezählt werden. Zum Zählen count() verwenden.
  • NaN prüfen: Mit Number.isNaN() prüfen, nicht mit === NaN.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Im Internet Explorer gab es document.evaluate nicht. In Node.js gibt es die Eigenschaft nur über DOM-Implementierungen wie jsdom.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird still ignoriert (im Strict Mode gibt es einen TypeError).