Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
JSONPath — Ein Fork von JSONPath von http://goessner.net/articles/JsonPath/ | Kitploit
Tools/GitHubGitHub/jsonpath-plus/jsonpath
Allgemeine DienstprogrammeStatische AnalyseCode-AnalyseScripting & AutomatisierungDienstprogramme & Frameworks
GitHubjsonpath-plus/jsonpath

JSONPath

Ein Fork von JSONPath von http://goessner.net/articles/JsonPath/

Repository anzeigen
1.2k200vor 3 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

npm

testing badge coverage badge

Known Vulnerabilities

Licenses badge

Node.js CI status

(siehe auch Lizenzen für dev. Abhängigkeiten)

JSONPath Plus

Analysieren, transformieren und selektiv Daten aus JSON-Dokumenten (und JavaScript-Objekten) extrahieren.

jsonpath-plus erweitert die ursprüngliche Spezifikation um einige zusätzliche Operatoren und macht einige Verhaltensweisen explizit, die die ursprüngliche Spezifikation nicht klar definiert hat.

Probieren Sie die Browser-Demo oder Runkit (Node).

Bitte beachten: Dieses Projekt wird derzeit nicht aktiv gepflegt. Wir akzeptieren möglicherweise gut dokumentierte PRs oder einige einfache Updates, beabsichtigen jedoch nicht, selbst Fehlerbehebungen vorzunehmen oder neue Funktionen hinzuzufügen.

Features

  • Konform mit der ursprünglichen jsonpath-Spezifikation
  • Praktische Ergänzungen oder Ausführungen, die in der ursprünglichen Spezifikation nicht enthalten sind:
    • ^ zum Abrufen des übergeordneten Elements eines übereinstimmenden Objekts
    • ~ zum Abrufen von Eigenschaftsnamen übereinstimmender Objekte (als Array)
    • Typselektoren zum Erhalten von:
      • Basistypen von JSON: @null(), @boolean(), @number(), @string(), @array(), @object()
      • @integer()
      • Der zusammengesetzte Typ @scalar() (akzeptiert auch undefined und nicht-endliche Zahlen, wenn JavaScript-Objekte abgefragt werden, sowie alle grundlegenden Nicht-Objekt-/Nicht-Funktionstypen)
      • @other(), verwendbar in Verbindung mit einem benutzerdefinierten

Benchmarking

jsonpath-plus ist bei großen und kleinen Datensätzen im Vergleich zu anderen JSON-Abfragebibliotheken durchweg leistungsfähig, gemäß json-querying-performance-testing. Sie können diese Ergebnisse überprüfen, indem Sie das Projekt selbst ausführen und weitere Leistungstests hinzufügen.

Installieren```shell

npm install jsonpath-plus

root@kitploit:~
## Einrichtung

### Node.js```js
const {JSONPath} = require('jsonpath-plus');

const result = JSONPath({path: '...', json});

Browser

Für die Verwendung im Browser können Sie dist/index-browser-umd.cjs direkt einbinden; keine Browserify-Magie ist erforderlich:```html

root@kitploit:~
### ESM (Moderne Browser)

Sie können auch ES6-Modulimporte verwenden (für moderne Browser):```html
<script type="module">

import {
    JSONPath
} from './node_modules/jsonpath-plus/dist/index-browser-esm.js';

const result = JSONPath({path: '...', json: {}});

</script>

ESM (Bundler)

Oder wenn du dein JavaScript bündelst (z. B. mit Rollup), verwende einfach, wobei zu beachten ist, dass mainFields für Browser-Builds browser enthalten sollte (für Node sollte die Standardeinstellung, die module prüft, in Ordnung sein):```js import {JSONPath} from 'jsonpath-plus';

const result = JSONPath({path: '...', json});

root@kitploit:~
## Verwendung

Die vollständige verfügbare Signatur lautet:```
const result = JSONPath([options,] path, json, callback, otherTypeCallback);

Die Argumente path, json, callback und otherTypeCallback können alternativ (zusammen mit allen anderen verfügbaren Eigenschaften) auch auf options angegeben werden.

Beachten Sie, dass result alle gefundenen Elemente enthält (optional in ein Array gewickelt), während callback verwendet werden kann, wenn Sie eine Operation ausführen möchten, sobald jedes Element gefunden wird, wobei die Callback-Funktion 0 bis N Mal ausgeführt wird, abhängig von der Anzahl der unabhängigen Elemente, die im Ergebnis gefunden werden. Weitere Informationen zu den verfügbaren Argumenten von JSONPath finden Sie in der folgenden Dokumentation.

Siehe auch die API-Dokumentation.

Eigenschaften

Die Eigenschaften, die auf dem Optionsobjekt oder in der evaluate-Methode (als erstes Argument) angegeben werden können, umfassen:

  • path (erforderlich) - Der JSONPath-Ausdruck als (normalisierter oder nicht normalisierter) String oder Array
  • json (erforderlich) - Das auszuwertende JSON-Objekt (ob vom Typ null, boolean, number, string, object oder array).
  • autostart (Standard: true) - Wenn dies als false angegeben wird, kann die evaluate-Methode manuell aufgerufen werden.
  • flatten (Standard: false) - Gibt an, ob das zurückgegebene Ergebnis-Array zu einem eindimensionalen Array abgeflacht wird.
  • resultType (Standard: "value") - Kann eine case-insensitive Form von "value", "path", "pointer", "parent" oder "parentProperty" sein, um zu bestimmen, ob die Ergebnisse jeweils als Werte der gefundenen Elemente, als deren absolute Pfade, als JSON-Pointer zu den absoluten Pfaden, als deren übergeordnete Objekte oder als deren übergeordneten Eigenschaftsnamen zurückgegeben werden. Wenn auf "all" gesetzt, werden alle diese Typen auf einem Objekt mit dem Typ als Schlüsselnamen zurückgegeben.
  • sandbox (Standard: {}) - Schlüssel-Wert-Zuordnung von Variablen, die für Codeauswertungen wie Filterausdrücke verfügbar sein sollen. (Beachten Sie, dass der aktuelle Pfad und Wert ebenfalls für diese Ausdrücke verfügbar sind; siehe den Abschnitt Syntax für Details.)
  • wrap (Standard: true) - Gibt an, ob die Ergebnisse in ein Array gewickelt werden sollen. Wenn wrap auf false gesetzt ist und keine Ergebnisse gefunden werden, wird undefined zurückgegeben (im Gegensatz zu einem leeren Array, wenn wrap auf true gesetzt ist). Wenn auf gesetzt ist und ein einzelnes nicht-Array-Ergebnis gefunden wird, wird dieses Ergebnis als einziges Element zurückgegeben (nicht innerhalb eines Arrays). Wenn mehrere Ergebnisse gefunden werden, wird jedoch weiterhin ein Array zurückgegeben. Um Mehrdeutigkeiten zu vermeiden (falls es notwendig ist, zwischen einem Ergebnis, das ein Fehlschlag ist, und einem, das ein leeres Array ist, zu unterscheiden), wird empfohlen, den Standard auf zu ändern.

Instanzmethoden

  • evaluate(path, json, callback, otherTypeCallback) ODER evaluate({path: <path>, json: <json object>, callback: <callback function>, otherTypeCallback: <otherTypeCallback function>}) - Diese Methode ist nur notwendig, wenn die Eigenschaft autostart auf false gesetzt ist. Sie kann für wiederholte Auswertungen mit derselben Konfiguration verwendet werden. Neben den aufgeführten Eigenschaften kann das letztere Methodenmuster jede der anderen zulässigen Instanzeigenschaften akzeptieren (außer autostart, das hier keine Relevanz hätte).

Klasseneigenschaften und -methoden

  • JSONPath.clearCache() - Löscht die intern zwischengespeicherten geparsten Pfade und kompilierten Skripte. Der Cache-Inhalt wird nicht offengelegt; rufen Sie diese Methode auf, wenn eine Cache-Invalidierung erforderlich ist.
  • JSONPath.toPathArray(pathAsString) - Akzeptiert einen normalisierten oder nicht normalisierten Pfad als String und konvertiert ihn in ein Array: zum Beispiel ['$', 'aProperty', 'anotherProperty'].
  • JSONPath.toPathString(pathAsArray) - Akzeptiert ein Pfad-Array und konvertiert es in einen normalisierten Pfad-String. Der String hat eine Form wie: $['aProperty']['anotherProperty][0]. Die JSONPath-Endkonstruktionen ~ und ^ sowie Typoperatoren wie @string() werden stillschweigend entfernt.
  • JSONPath.toPointer(pathAsArray) - Akzeptiert ein Pfad-Array und konvertiert es in einen JSON-Pointer. Der String wird eine Form haben wie: /aProperty/anotherProperty/0 (wobei alle internen ~- und /-Zeichen gemäß der JSON-Pointer-Spezifikation maskiert werden). Die JSONPath-Endkonstruktionen ~ und ^ und Typoperatoren wie werden stillschweigend entfernt.

Syntax anhand von Beispielen

Gegeben sei das folgende JSON, entnommen von http://goessner.net/articles/JsonPath/:```json { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }

root@kitploit:~
und die folgende XML-Darstellung:```xml
<store>
    <book>
        <category>reference</category>
        <author>Nigel Rees</author>
        <title>Sayings of the Century</title>
        <price>8.95</price>
    </book>
    <book>
        <category>fiction</category>
        <author>Evelyn Waugh</author>
        <title>Sword of Honour</title>
        <price>12.99</price>
    </book>
    <book>
        <category>fiction</category>
        <author>Herman Melville</author>
        <title>Moby Dick</title>
        <isbn>0-553-21311-3</isbn>
        <price>8.99</price>
    </book>
    <book>
        <category>fiction</category>
        <author>J. R. R. Tolkien</author>
        <title>The Lord of the Rings</title>
        <isbn>0-395-19395-8</isbn>
        <price>22.99</price>
    </book>
    <bicycle>
        <color>red</color>
        <price>19.95</price>
    </bicycle>
</store>

Bitte beachten Sie, dass die untenstehenden XPath-Beispiele nicht zwischen dem Abrufen von Elementen und deren Textinhalt unterscheiden (außer wo dies für Vergleiche nützlich ist oder um Mehrdeutigkeiten zu vermeiden). Hinweis: Zum Testen der XPath-Beispiele (einschließlich 2.0-Beispiele) kann diese Demo hilfreich sein (auf xml oder xml-strict eingestellt).| XPath | JSONPath | Ergebnis | Anmerkungen | |-------------------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | /store/book/author | $.store.book[*].author | Die Autoren aller Bücher im Store | Kann auch ohne das als dargestellt werden (auch wenn dies nicht in der ursprünglichen Spezifikation enthalten ist); beachten Sie jedoch, dass einige Zeichenliterale ( und ) ein Escaping erfordern | | | | Alle Autoren | | | | | Alle Dinge im Store, nämlich seine Bücher (ein Buch-Array) und ein rotes Fahrrad (ein Fahrrad-Objekt). | | | | | Der Preis von allem im Store. | | | | | Das dritte Buch (Buch-Objekt) | | | | | Das letzte Buch in der Reihenfolge. | Um auf eine Eigenschaft mit einem Sonderzeichen zuzugreifen, verwenden Sie für den Filter (diese spezielle Funktion ist nicht in der ursprünglichen Spezifikation enthalten) | | | | Die ersten beiden Bücher | | | oder in XPath 2.0 | | Die Kategorien und Autoren aller Bücher | | | | | Filtert alle Bücher mit einer ISBN-Nummer | Um auf eine Eigenschaft mit einem Sonderzeichen zuzugreifen, verwenden Sie für den Filter (diese spezielle Funktion ist nicht in der ursprünglichen Spezifikation enthalten) | | | | Filtert alle Bücher, die günstiger als 10 sind | | | | | Ermittelt alle Eigenschaftswerte von Objekten, deren Eigenschaft price ist und die nicht 8.95 entsprechen | Da das bloße das Filtern von Objekten nach Eigenschaftswert erlaubt (nicht unbedingt innerhalb von Arrays), können Sie nach dem Ausdruck hinzufügen, um an das Objekt zu gelangen, das die gefilterten Eigenschaften besitzt | | | | Die Wurzel des JSON-Objekts (d. h. das gesamte Objekt selbst) | Um ein literales zu erhalten (allein oder irgendwo im Pfad), müssen Sie das Backtick-Escape verwenden | | | | Alle Elemente (und Text) unterhalb der Wurzel in einem XML-Dokument. Alle Mitglieder einer JSON-Struktur unterhalb der Wurzel. | | | | | Alle Elemente in einem XML-Dokument. Alle übergeordneten Komponenten einer JSON-Struktur einschließlich der Wurzel. | Dieses Verhalten wurde in der ursprünglichen Spezifikation nicht direkt festgelegt | | | | Übergeordnetes Element derjenigen Elemente mit einem Preis größer als 19 (d. h. der Store-Wert als übergeordnetes Element des Fahrrads und das Buch-Array als übergeordnetes Element eines einzelnen Buchs) | Parent (Caret) ist nicht in der ursprünglichen Spezifikation enthalten | | (in XPath 2.0) | | Die Eigenschaftsnamen des Store-Unterobjekts ("book" und "bicycle"). Nützlich bei Wildcard-Eigenschaften. | Eigenschaftsname (Tilde) ist nicht in der ursprünglichen Spezifikation enthalten | | (in XPath 2.0) | | Alle Bücher außer demjenigen an dem Pfad, der auf das erste zeigt | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Ermittelt alle Kategorien von Büchern, bei denen das übergeordnete Objekt des Buchs ein Fahrrad-Kind hat, dessen Farbe rot ist (d. h. alle Bücher) | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Ermittelt alle Kinder von "book" außer den "category"-Kindern | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Ermittelt alle Bücher, deren Eigenschaft (die, da wir in ein Array hineingreifen, der numerische Index ist) nicht 0 ist | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Ermittelt die Enkelkinder von Store, deren übergeordnete Eigenschaft nicht book ist (d. h. die Kinder des Fahrrads, "color" und "price") | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Ermittelt die Eigenschaftswerte aller Buch-Instanzen, wobei die übergeordnete Eigenschaft dieser Werte (d. h. der Array-Index, der das übergeordnete Objekt des Buch-Elements enthält) nicht 0 ist | ist nicht in der ursprünglichen Spezifikation enthalten | | | | Filtert alle Bücher, deren Preis dem Preis des dritten Buchs entspricht | ist nicht in der ursprünglichen Spezifikation enthalten | | (in XPath 2.0) | | Ermittelt die numerischen Werte innerhalb des Buch-Arrays | , die anderen Basistypen (, ), weitere abgeleitete Typen auf niedriger Ebene (, , ), der von JSONSchema hinzugefügte Typ , der zusammengesetzte Typ (der außerdem und nicht-endliche Zahlen für JavaScript-Objekte sowie alle grundlegenden Nicht-Objekt-/Nicht-Funktionstypen akzeptiert), der Typ , der in Verbindung mit einem benutzerdefinierten Callback verwendet werden soll (siehe ), sowie die folgenden Nicht-JSON-Typen, die dennoch mit JSONPath verwendet werden können, wenn Nicht-JSON-JavaScript-Objekte abgefragt werden (, , ) sind nicht in der ursprünglichen Spezifikation enthalten | | (XPath 2.0) | | Alle Kategorien von Büchern, die dem regulären Ausdruck entsprechen (enden mit "TION", ohne Beachtung der Groß-/Kleinschreibung) | ist nicht in der ursprünglichen Spezifikation enthalten. | | (XPath 2.0) | | Alle Bücher, die eine Eigenschaft besitzen, die dem regulären Ausdruck entspricht (enden mit "TION", ohne Beachtung der Groß-/Kleinschreibung) | ist nicht in der ursprünglichen Spezifikation enthalten. Hinweis: Verwendet den Parent-Selektor am Ende des Ausdrucks, um zum übergeordneten Objekt zurückzukehren; ohne den Parent-Selektor werden die beiden -Schlüsselwerte abgeglichen. | | | (z. B. , um eine Eigenschaft mit dem wörtlichen Namen abzugleichen) | Escaped die gesamte folgende Sequenz (die als Literal behandelt werden soll) | ist nicht in der ursprünglichen Spezifikation enthalten; um ein literales Backtick zu erhalten, verwenden Sie ein zusätzliches Backtick zum Escapen |Any additional variables supplied as properties on the optional "sandbox" object option are also available to (parenthetical-based) evaluations.

Mögliche Verwirrungsquellen für XPath-Benutzer

  1. In JSONPath wählt ein Filterausdruck zusätzlich zu seinem @, das eine Referenz auf seine Kinder ist, tatsächlich auch die unmittelbaren Kinder aus, während in XPath Filterbedingungen nicht die Kinder auswählen, sondern festlegen, welche seiner Elternknoten im Ergebnis erhalten werden.
  2. In JSONPath sind Array-Indizes, wie in JavaScript, 0-basiert (sie beginnen bei 0), während sie in XPath 1-basiert sind.
  3. In JSONPath verwenden Gleichheitstests (gemäß JavaScript) mehrere Gleichheitszeichen, während sie in XPath ein einzelnes Gleichheitszeichen verwenden.

Befehlszeilenschnittstelle

Eine grundlegende Befehlszeilenschnittstelle (CLI) wird bereitgestellt. Verwenden Sie sie mit npx jsonpath-plus <json-file> <jsonpath-query>.

Ideen

  1. Unterstützung von OR außerhalb von Filtern (wie in XPath |) und Gruppierung.
  2. Syntax erstellen, die wie XPath-Filter funktioniert, um Kinder nicht auszuwählen?
  3. Option für ein parentNode-Äquivalent zulassen (Beibehaltung der gesamten Kette von Eltern- und parentProperty-Objekten bis zur Wurzel)

Entwicklung

Ausführen der Tests auf Node:```shell npm test

root@kitploit:~
Für In-Browser-Tests:

- Stellen Sie die js/html-Dateien bereit:```shell
npm run browser-test
  • Besuchen Sie http://localhost:8082/test/.

Sicherheit

Bitte lesen Sie SECURITY.md für wichtige Sicherheitsaspekte und Anweisungen, wie Sie Schwachstellen melden können.

Lizenz

MIT-Lizenz.

Tool herunterladen
otherTypeCallback
  • Nicht-JSON-Typen, die dennoch bei der Abfrage von Nicht-JSON-JavaScript-Objekten verwendet werden können (@undefined(), @function(), @nonFinite())
  • @path/@parent/@property/@parentProperty/@root Kurzschreibselektoren innerhalb von Filtern
  • Escaping
    • ` zum Escapen der restlichen Sequenz
    • @['...']/?@['...']-Syntax zum Escapen von Sonderzeichen innerhalb von Eigenschaftsnamen in Filtern
  • Dokumentiert $.. (Abrufen aller übergeordneten Komponenten)
  • ESM- und UMD-Exportformate
  • Zusätzlich zu den abgefragten Werten können verschiedene Metainformationen zurückgegeben werden, einschließlich Pfaden oder Zeigern auf den Wert sowie des übergeordneten Objekts und des übergeordneten Eigenschaftsnamens (um Änderungen zu ermöglichen).
  • Hilfsprogramme zur Konvertierung zwischen Pfaden, Arrays und Zeigern
  • Option zum Verhindern von Auswertungen, die in der ursprünglichen Spezifikation erlaubt sind, oder zur Bereitstellung einer Sandbox für ausgewertete Werte.
  • Option für einen Rückruf zur Verarbeitung der Ergebnisse, sobald sie erhalten werden.
  • wrap
    false
    false
  • eval (Standard: "safe") - Methode zur Skriptauswertung. safe: Im Browser wird eine minimale Skript-Engine verwendet, die weder eval noch Function nutzt und die Content Security Policy erfüllt. In NodeJS hat dies keine Auswirkung und entspricht native, da Skripte dort sicher sind. native: verwendet die nativen Skriptfähigkeiten, d. h. unsicheres eval oder Function im Browser und vm.Script in Node.js. false: Deaktiviert JavaScript- Auswertungsausdrücke und wirft Ausnahmen, wenn solche Ausdrücke versucht werden. callback [ (code, context) => value]: Eine benutzerdefinierte Implementierung, die mit code und context als Argumenten aufgerufen wird, um den ausgewerteten Wert zurückzugeben. class: Eine Klasse, die mit code als Konstruktorargument erstellt wird und deren Code durch Aufruf von runInNewContext mit context ausgewertet wird. ``
  • ignoreEvalErrors (Standard: false) - Fehler ignorieren, die während der Skriptauswertung auftreten.
  • parent (Standard: null) - Falls eine Abfrage den Wurzelknoten zurückgeben könnte, ermöglicht dies, das übergeordnete Element dieses Wurzelknotens innerhalb der Ergebnisse zurückzugeben.
  • parentProperty (Standard: null) - Falls eine Abfrage den Wurzelknoten zurückgeben könnte, ermöglicht dies, die parentProperty dieses Wurzelknotens innerhalb der Ergebnisse zurückzugeben. Dies kann ein String-Eigenschaftsname oder ein numerischer Array-Index sein.
  • callback (Standard: (keine)) - Wenn angegeben, wird ein Callback unmittelbar nach dem Abrufen eines Endpunktwerts aufgerufen. Die drei gelieferten Argumente sind der Wert der Nutzlast (gemäß resultType), der Typ der Nutzlast (ob es sich um einen normalen "value" oder einen "property"-Namen handelt) und ein vollständiges Nutzlastobjekt (mit allen resultTypes).
  • otherTypeCallback (Standard: <Eine Funktion, die einen Fehler wirft, wenn @other() auftritt>) - In Ermangelung einer JSON-Schema-Unterstützung kann man Typen über die eingebauten Typen hinaus bestimmen, indem man den Operator @other() am Ende der Abfrage hinzufügt. Wenn ein solcher Pfad auftritt, wird der otherTypeCallback mit dem Wert des Elements, seinem Pfad, seinem übergeordneten Element und dem Eigenschaftsnamen seines übergeordneten Elements aufgerufen. Er sollte einen booleschen Wert zurückgeben, der angibt, ob der gelieferte Wert zum Typ "other" gehört oder nicht (oder er kann Transformationen durchführen und false zurückgeben).
  • @string()
    $.
    store.book[*].author
    $
    @
    //author
    $..author
    /store/*
    $.store.*
    /store//price
    $.store..price
    //book[3]
    $..book[2]
    //book[last()]
    $..book[(@.length-1)]

    $..book[-1:]
    [(@['...'])]
    //book[position()<3]
    $..book[0,1]

    $..book[:2]
    //book/*[self::category\|self::author]
    //book/(category,author)
    $..book[0][category,author]
    //book[isbn]
    $..book[?(@.isbn)]
    [?@['...']]
    //book[price<10]
    $..book[?(@.price<10)]
    //*[name() = 'price' and . != 8.95]
    $..*[?(@property === 'price' && @ !== 8.95)]
    @
    ^
    /
    $
    $
    //*/*\|//*/*/text()
    $..*
    //*
    $..
    //*[price>19]/..
    $..[?(@.price>19)]^
    /store/*/name()
    $.store.*~
    /store/book[not(. is /store/book[1])]
    $.store.book[?(@path !== "$['store']['book'][0]")]
    @path
    //book[parent::*/bicycle/color = "red"]/category
    $..book[?(@parent.bicycle && @parent.bicycle.color === "red")].category
    @parent
    //book/*[name() != 'category']
    $..book.*[?(@property !== "category")]
    @property
    //book[position() != 1]
    $..book[?(@property !== 0)]
    @property
    /store/*/*[name(parent::*) != 'book']
    $.store.*[?(@parentProperty !== "book")]
    @parentProperty
    //book[count(preceding-sibling::*) != 0]/*/text()
    $..book.*[?(@parentProperty !== 0)]
    @parentProperty
    //book[price = /store/book[3]/price]
    $..book[?(@.price === @root.store.book[2].price)]
    @root
    //book/../*[. instance of element(*, xs:decimal)]
    $..book..*@number()
    @number()
    @boolean()
    @string()
    @null()
    @object()
    @array()
    @integer()
    @scalar()
    undefined
    @other()
    otherTypeCallback
    @undefined()
    @function()
    @nonFinite()
    //book/*[name() = 'category' and matches(., 'tion$')]
    $..book.*[?(@property === "category" && @.match(/TION$/i))]
    @property
    //book/*[matches(name(), 'bn$')]/parent::*
    $..book.*[?(@property.match(/bn$/i))]^
    @property
    ^
    isbn
    `
    `$
    $
    `