Signatur
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
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);
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)} €`);
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
}
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);
// Wichtig · Fallstricke
- Typfehler: Ist
resultTypenichtNUMBER_TYPE, wirft der Zugriff aufnumberValueeinen Fehler (in modernen Browsern einenTypeError, laut älterer Spezifikation eineXPathExceptionmit dem CodeTYPE_ERR). - Ausdruck muss eine Zahl liefern: Fordert man
NUMBER_TYPEfür einen Knoten-Ausdruck wie//lian, wird der Textinhalt des ersten Knotens in eine Zahl umgewandelt. Das ergibt oftNaN, statt dass die Knoten gezählt werden. Zum Zählencount()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.evaluatenicht. 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).