XPath - Kurzanleitung

Bevor wir XPath lernen, sollten wir zuerst XSL verstehen, für das steht Edehnbar SStylesheet LSprache. Es ähnelt XML wie CSS HTML.

Notwendigkeit für XSL

Bei HTML-Dokumenten sind Tags wie Tabelle, Div, Span usw. vordefiniert. Der Browser weiß, wie man ihnen einen Stil hinzufügt und sie mithilfe von CSS-Stilen anzeigt. Bei XML-Dokumenten sind Tags jedoch nicht vordefiniert. Um ein XML-Dokument zu verstehen und zu formatieren,World Wide Web Consortium (W3C)entwickelte XSL, die als XML-basierte Stylesheet-Sprache fungieren kann. Ein XSL-Dokument gibt an, wie ein Browser ein XML-Dokument rendern soll.

Im Folgenden sind die Hauptteile von XSL aufgeführt:

  • XSLT - Wird verwendet, um XML-Dokumente in verschiedene andere Dokumenttypen umzuwandeln.

  • XPath - wird zum Navigieren in XML-Dokumenten verwendet.

  • XSL-FO - zum Formatieren von XML-Dokumenten.

Was ist XPath?

XPath ist eine offizielle Empfehlung des World Wide Web Consortium (W3C). Es definiert eine Sprache zum Suchen von Informationen in einer XML-Datei. Es wird verwendet, um Elemente und Attribute eines XML-Dokuments zu durchlaufen. XPath bietet verschiedene Arten von Ausdrücken, mit denen relevante Informationen aus dem XML-Dokument abgefragt werden können.

  • Structure Definitions - XPath definiert die Teile eines XML-Dokuments wie Element-, Attribut-, Text-, Namespace-, Verarbeitungsanweisungs-, Kommentar- und Dokumentknoten

  • Path Expressions - XPath bietet leistungsstarke Pfadausdrücke, um Knoten oder eine Liste von Knoten in XML-Dokumenten auszuwählen.

  • Standard Functions - XPath bietet eine umfangreiche Bibliothek mit Standardfunktionen für die Bearbeitung von Zeichenfolgenwerten, numerischen Werten, Datums- und Zeitvergleich, Knoten- und QName-Manipulation, Sequenzmanipulation, Booleschen Werten usw.

  • Major part of XSLT - XPath ist eines der Hauptelemente des XSLT-Standards und muss über Kenntnisse verfügen, um mit XSLT-Dokumenten arbeiten zu können.

  • W3C recommendation - XPath ist eine offizielle Empfehlung des World Wide Web Consortium (W3C).

Bei der Arbeit mit XPath sollten folgende Punkte beachtet werden:

  • XPath ist die Kernkomponente des XSLT- Standards.
  • XSLT kann ohne XPath nicht funktionieren.
  • XPath ist Basis von XQuery und XPointer.

Ein XPath-Ausdruck definiert im Allgemeinen ein Muster, um eine Reihe von Knoten auszuwählen. Diese Muster werden von XSLT zur Durchführung von Transformationen oder von XPointer zur Adressierung verwendet.

Die XPath-Spezifikation gibt sieben Knotentypen an, die die Ausgabe der Ausführung des XPath-Ausdrucks sein können.

  • Root
  • Element
  • Text
  • Attribute
  • Comment
  • Verarbeitungsanweisung
  • Namespace

XPath verwendet einen Pfadausdruck, um einen Knoten oder eine Liste von Knoten aus einem XML-Dokument auszuwählen.

Im Folgenden finden Sie eine Liste nützlicher Pfade und Ausdrücke zum Auswählen eines beliebigen Knotens / einer beliebigen Liste von Knoten aus einem XML-Dokument.

S.No. Ausdruck & Beschreibung
1

node-name

Wählen Sie alle Knoten mit dem angegebenen Namen "Knotenname" aus.

2

/

Die Auswahl beginnt am Wurzelknoten

3

//

Die Auswahl beginnt am aktuellen Knoten, der der Auswahl entspricht

4

.

Wählt den aktuellen Knoten aus

5

..

Wählt das übergeordnete Element des aktuellen Knotens aus

6

@

Wählt Attribute aus

7

student

Beispiel - Wählt alle Knoten mit dem Namen "Student" aus.

8

class/student

Beispiel - Wählt alle Schülerelemente aus, die Kinder der Klasse sind

9

//student

Wählt alle Schülerelemente aus, unabhängig davon, wo sie sich im Dokument befinden

Beispiel

In diesem Beispiel haben wir ein XML-Beispieldokument, students.xml, und sein Stylesheet-Dokument erstellt students.xsl welches die XPath-Ausdrücke unter verwendet select Attribut verschiedener XSL-Tags, um die Werte von Rollennummer, Vorname, Nachname, Spitzname und Markierungen jedes Schülerknotens abzurufen.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  

   <xsl:template match = "/">
      <html>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>
               <xsl:for-each select = "class/student">
                  <tr>
                     <td> <xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>

</xsl:stylesheet>

Überprüfen Sie die Ausgabe

In diesem Kapitel sehen wir den XPath-Ausdruck in Details, die allgemeine Knotentypen abdecken, die XPath definiert und behandelt.

S.No. Knotentyp & Beschreibung
1 Wurzel

Stammelementknoten eines XML-Dokuments.

2 Element

Elementknoten.

3 Text

Text eines Elementknotens.

4 Attribut

Attribut eines Elementknotens.

5 Kommentar

Kommentar

Der Standortpfad gibt den Standort des Knotens im XML-Dokument an. Dieser Pfad kann absolut oder relativ sein. Wenn der Standortpfad mit dem Wurzelknoten oder mit '/' beginnt, handelt es sich um einen absoluten Pfad. Im Folgenden finden Sie einige Beispiele für das Auffinden der Elemente mithilfe des absoluten Pfads.

/class/student - Wählen Sie die Schülerknoten innerhalb des Klassenstammknotens aus.

<xsl:for-each select = "/class/student">

/class/student/firstname - Wählen Sie den Vornamen eines Schülerknotens innerhalb des Klassenstammknotens.

<p><xsl:value-of select = "/class/student/firstname"/></p>

Beispiel

In diesem Beispiel haben wir ein XML-Beispieldokument erstellt students.xml und sein Stylesheet-Dokument students.xsl welches die XPath-Ausdrücke verwendet.

Im Folgenden finden Sie das verwendete Beispiel-XML.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  
	
   <xsl:template match = "/" >
      <html>
         <body>
            <h3>Details of each Students. </h3>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>		 
               </tr>	
					
               <tr>
                  <td><xsl:value-of select = "/class/student[1]/@rollno"/></td>
                  <td><xsl:value-of select = "/class/student[1]/firstname"/></td>
                  <td><xsl:value-of select = "/class/student[1]/lastname"/></td>
                  <td><xsl:value-of select = "/class/student[1]/nickname"/></td>
                  <td><xsl:value-of select = "/class/student[1]/marks"/></td>		 
               </tr>
					
               <tr>
                  <td>
                     <xsl:value-of select = "/class/student/@rollno"/>
                  </td>
                  <td><xsl:value-of select = "/class/student[2]/firstname"/></td>
                  <td><xsl:value-of select = "/class/student[2]/lastname"/></td>
                  <td><xsl:value-of select = "/class/student[2]/nickname"/></td>
                  <td><xsl:value-of select = "/class/student[2]/marks"/></td>		 
               </tr>
					
               <tr>
                  <td>
                     <xsl:value-of select = "/class/student[3]/@rollno"/>
                  </td>
                  <td><xsl:value-of select = "/class/student[3]/firstname"/></td>
                  <td><xsl:value-of select = "/class/student[3]/lastname"/></td>
                  <td><xsl:value-of select = "/class/student[3]/nickname"/></td>
                  <td><xsl:value-of select = "/class/student[3]/marks"/></td>		 
               </tr>
      
            </table> 
   
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Überprüfen Sie die Ausgabe

Der Standortpfad gibt den Standort des Knotens im XML-Dokument an. Dieser Pfad kann absolut oder relativ sein. Wenn der Standortpfad mit dem ausgewählten Knoten beginnt, handelt es sich um einen relativen Pfad.

Im Folgenden finden Sie einige Beispiele zum Auffinden der Elemente mithilfe des relativen Pfads.

firstname - Wählen Sie den Vornamen für die Schülerknoten.

<p><xsl:value-of select = "firstname"/></p>

Beispiel

In diesem Beispiel haben wir ein XML-Beispieldokument erstellt students.xml und sein Stylesheet-Dokument students.xsl welches die XPath-Ausdrücke verwendet.

Im Folgenden finden Sie das verwendete Beispiel-XML.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
	
   <xsl:template match = "/" >
      <html>
         <body>
            <h3>Details of each Students. </h3>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>		 
               </tr>		 
					
               <xsl:for-each select = "/class/student">
                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>		 
                  </tr>
               </xsl:for-each>
            </table> 
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Überprüfen Sie die Ausgabe

Da der Standortpfad den Standort eines Knotens unter Verwendung eines absoluten oder relativen Pfads definiert, werden Achsen verwendet, um Elemente anhand ihrer Beziehung wie zu identifizieren parent, child, sibling, usw. Achsen werden so benannt, weil sie sich auf die Achse beziehen, auf der Elemente relativ zu einem Element liegen.

Es folgt die Liste der verschiedenen Achsenwerte.

S.No. Achse & Beschreibung
1

ancestor

Stellt die Vorfahren des aktuellen Knotens dar, zu denen die übergeordneten Knoten bis zum Stammknoten gehören.

2

ancestor-or-self

Repräsentiert den aktuellen Knoten und seine Vorfahren.

3

attribute

Repräsentiert die Attribute des aktuellen Knotens.

4

child

Repräsentiert die untergeordneten Elemente des aktuellen Knotens.

5

descendant

Repräsentiert die Nachkommen des aktuellen Knotens. Nachkommen sind die Kinder des Knotens bis zum Blattknoten (keine Kinder mehr).

6

descendant-or-self

Repräsentiert den aktuellen Knoten und seine Nachkommen.

7

following

Repräsentiert alle Knoten, die nach dem aktuellen Knoten kommen.

8

following-sibling

Repräsentiert die folgenden Geschwister des Kontextknotens. Geschwister befinden sich auf derselben Ebene wie der aktuelle Knoten und teilen dessen übergeordneten Knoten.

9

namespace

Repräsentiert den Namespace des aktuellen Knotens.

10

parent

Repräsentiert das übergeordnete Element des aktuellen Knotens.

11

preceding

Stellt alle Knoten dar, die vor dem aktuellen Knoten liegen (dh vor dem Öffnen des Tags).

12

self

Repräsentiert den aktuellen Knoten.

Im Folgenden finden Sie einige Beispiele für die Verwendung von Achsen.

firstname - Wählen Sie den Vornamen für die Schülerknoten.

<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>

Beispiel

In diesem Beispiel haben wir ein XML-Beispieldokument erstellt students.xml und sein Stylesheet-Dokument students.xsl welches die XPath-Ausdrücke verwendet.

Im Folgenden finden Sie das verwendete Beispiel-XML.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <!-- Comment: This is a list of student -->
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> 
	
   <xsl:template match = "/" >
      <html>
         <body>  
            <xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
            <br/>
            <xsl:text>First Student: </xsl:text>
            <xsl:value-of select = "/class/student/child::firstname" />    
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Überprüfen Sie die Ausgabe

In diesem Kapitel werden XPath-Operatoren und -Funktionen ausführlich zu häufig verwendeten XPath-Operatoren beschrieben defines und handles. XPath definiert Operatoren und Funktionen für Knoten, Zeichenfolgen, Zahlen und Boolesche Typen.

Im Folgenden finden Sie die Liste, über die wir diskutieren werden.

S.No. Operatoren / Funktionen & Beschreibung
1 Vergleichsoperatoren

Vergleichsoperatoren zum Vergleichen von Werten.

2 Boolesche Operatoren

Boolesche Operatoren zum Überprüfen der Funktionen 'und', 'oder' & 'nicht'.

3 Zahlenfunktionen / Operatoren

Operatoren / Funktionen für Zahlen.

4 String-Funktionen

Verschiedene Stringfunktionen.

5 Knotenfunktionen / Operatoren

Verschiedene Funktionen und Operatoren, die auf Knoten wirken.

XPath definiert die folgenden Platzhalter auf Knoten, die mit den XPath-Ausdrücken verwendet werden sollen.

S.No. WildCard & Beschreibung
1

*

wird verwendet, um einen beliebigen Knoten abzugleichen.

2

.

wird verwendet, um den aktuellen Knoten im Kontext abzugleichen.

3

@*

wird verwendet, um mit einem Attribut übereinzustimmen

4

node()

wird verwendet, um Knoten eines beliebigen Typs abzugleichen

Beispiel

In diesem Beispiel wird eine Tabelle mit <Studenten> -Elementen mit ihren Details erstellt, indem jeder Schüler durchlaufen wird.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
	
   <xsl:template match = "/">
      <html>
         <body>
            <h2>Students</h2>
            <xsl:apply-templates select = "class/*" />
         </body>
      </html>
   </xsl:template>

   <xsl:template match = "class/*">
      <xsl:apply-templates select = "@rollno" />
      <xsl:apply-templates select = "firstname" />
      <xsl:apply-templates select = "lastname" />
      <xsl:apply-templates select = "nickname" />
      <xsl:apply-templates select = "marks" />
      <br />
   </xsl:template>

   <xsl:template match = "@rollno">
      <span style = "font-size = 22px;">
         <xsl:value-of select = "." />
      </span>
      <br />
   </xsl:template>

   <xsl:template match = "firstname">
      First Name:<span style = "color:blue;">
         <xsl:value-of select = "." />
      </span>
      <br />
   </xsl:template>

   <xsl:template match = "lastname">
      Last Name:<span style = "color:green;">
         <xsl:value-of select = "." />
      </span>
      <br />
   </xsl:template>

   <xsl:template match = "nickname">
      Nick Name:<span style = "color:red;">
         <xsl:value-of select = "." />
      </span>
      <br />
   </xsl:template>

   <xsl:template match = "marks">
      Marks:<span style = "color:gray;">
         <xsl:value-of select = "." />
      </span>
      <br />
   </xsl:template>

</xsl:stylesheet>

Überprüfen Sie die Ausgabe

Prädikat bezieht sich auf den XPath-Ausdruck in eckigen Klammern. Es bezieht sich auf die Einschränkung der ausgewählten Knoten in einem Knotensatz für eine bestimmte Bedingung. Zum Beispiel,

S.No. Prädikat & Beschreibung
1

/class/student[1]

Wählen Sie das erste Schülerelement aus, das dem Klassenelement untergeordnet ist.

2

/class/student[last()]

Wählen Sie das letzte Schülerelement aus, das dem Klassenelement untergeordnet ist.

3

/class/student[@rolllno = 493]

Wählen Sie das Schülerelement mit der Rollennummer 493 aus.

4

/class/student[marks>85]

Wählen Sie das Schülerelement mit Noten> 85 aus.

Beispiel

In diesem Beispiel wird eine Tabelle mit <Studenten> -Elementen mit ihren Details erstellt, indem jeder Schüler durchlaufen wird. Es berechnet die Position des Schülerknotens und druckt dann die Schülerdetails zusammen mit der Seriennummer aus.

Studenten.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Studenten.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  

   <xsl:template match = "/">
      <html>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">	 
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>	  
               </tr>
					
               <xsl:for-each select = "/class/student[1]">
                  <tr>	 
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>	 
                  </tr>	
               </xsl:for-each>
					
               <xsl:for-each select = "/class/student[last()]">
                  <tr>	 
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>	 
                  </tr>	
               </xsl:for-each>
	
               <xsl:for-each select = "/class/student[@rollno = 493]">
                  <tr>	 
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>	 
                  </tr>	
               </xsl:for-each>

               <xsl:for-each select = "/class/student[marks > 85]">
                  <tr>	 
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>	 
                  </tr>	
               </xsl:for-each>
	
	
            </table>
  
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Überprüfen Sie die Ausgabe