XSL: XPath Path Language

XPath traversiert den DOM-Baum des XML-Dokuments, um einzelne Knoten (Nodes) zu finden. Das XML-Dokument wird dazu als Baumstruktur betrachtet. XPath navigiert nun über die einzelnen Knoten in dieser Baumstruktur.

XPath wurde ursprünglich geschrieben, um ein gemeinsames Modell / eine gemeinsame Syntax für XPointer und XSLT zu bekommen.

XPath kann außerdem simple Berechnungen mit Integer und String durchführen.

Versionen

XPath 1.0: Syntax und Semantik

Der wichtigste XPath-Ausdruck is der location path. Dieser besteht aus ein paar Lokalisierungsschritten. Jeder Lokalisierungsschritt hat drei Komponenten:

Jeder locations path wird im Hinblick auf einen Kontext-Knoten realisiert. Die Achse gibt mit Eltern-/Kind-Verhältnissen an, in welche Richtung von diesem Kontext Knoten navigiert werden soll. Das Prädikat wird benutzt, um einzelne Eigenschaften an die Zielknoten zu vergeben, diese werden wiederum in XPath notiert.

XPath kann entweder abbreviated oder full syntax notiert werden.

Beispiel I XML-Mutter

<A>
  <B>
    <C/>
  </B>
</A>

XPath I.1: abbreviated syntax

A/B/C

selektiert C-Elemente, die ein Kind des B-Elements sind, das ein Kind des A-Elements ist.

XPath I.2: abbreviated syntax

A//B/*[1]

selektiert die ersten Kinder aller B-Elemente, die Abkömmlinge (//) des A-Elements sind.

XPath I.1: full syntax

Simpelster XPath in full syntax

/child::A/child::B/child::C

selektiert C-Elemente, die ein Kind des B-Elements sind, das ein Kind des A-Elements ist.

XPath I.2: full syntax

child::A/descendant-or-self::node()/child::B/child::*[position()=1]

selektiert die ersten Kinder aller B-Elemente, die Abkömmlinge (//) des A-Elements sind.

Beispiel II

Gegeben sei folgendes Mutter-XML:

<?xml version="1.0" encoding="utf-8"?>
<Wikimedia>
  <projects>
    <project name="pieli.net" launch="1994-03-15">
      <editions>
        <edition language="English">en.pieli.net</edition>
        <edition language="German">de.pieli.net</edition>
        <edition language="French">fr.pieli.net</edition>
        <edition language="Polish">pl.pieli.net</edition>
        <edition language="Spanish">es.pieli.net</edition>
      </editions>
    </project>
    <project name="rundfunk.pieli.net" launch="2004-12-31">
      <editions>
        <edition language="English">rundfunk.pieli.net/en</edition>
        <edition language="French">rundfunk.pieli.net/fr</edition>
        <edition language="Vietnamese">rundfunk.pieli.net/vi</edition>
        <edition language="Turkish">rundfunk.pieli.net/tr</edition>
        <edition language="Spanish">rundfunk.pieli.net/es</edition>
      </editions>
    </project>
  </projects>
</Wikimedia>

XPath II.1

/pieli.net/projects/project/@name

selektiert alle Namens-Attribute aller Projekte

XPath II.2

/pieli.net//editions

selektiert alle Sprachen

XPath II.3

/pieli.net/projects/project/editions/edition[@language='English']/text()

selektiert alle Projekte (innenliegende Adresse), solange das Attribut language = English ist

XPath II.4

/pieli.net/projects/project[@name='pieli.net']/editions/edition/text()

selektiert alle Projekte (innenliegende Adresse), solange das Attribut name = pieli.net ist