Учебники

XPath — Краткое руководство

XPath — Обзор

Прежде чем изучать XPath, мы должны сначала понять XSL, который расшифровывается как L Расширяемая таблица типов. Это похоже на XML, как CSS на HTML.

Нужен для XSL

В случае документов HTML предварительно определены теги, такие как таблица, div, span и т. Д. Браузер знает, как добавить к ним стиль и отобразить их с помощью стилей CSS. Но в случае документов XML теги не предопределены. Чтобы понять и оформить XML-документ, Консорциум World Wide Web (W3C) разработал XSL, который может выступать в качестве языка таблиц стилей на основе XML. Документ XSL определяет, как браузер должен отображать документ XML.

Ниже приведены основные части XSL —

  • XSLT — используется для преобразования документов XML в различные другие типы документов.

  • XPath — используется для навигации по документам XML.

  • XSL-FO — используется для форматирования документов XML.

XSLT — используется для преобразования документов XML в различные другие типы документов.

XPath — используется для навигации по документам XML.

XSL-FO — используется для форматирования документов XML.

Что такое XPath?

XPath является официальной рекомендацией Консорциума World Wide Web (W3C). Он определяет язык для поиска информации в файле XML. Он используется для обхода элементов и атрибутов XML-документа. XPath предоставляет различные типы выражений, которые можно использовать для запроса соответствующей информации из документа XML.

  • Определения структуры — XPath определяет части документа XML, такие как элемент, атрибут, текст, пространство имен, инструкция обработки, комментарий и узлы документа.

  • Выражения пути — XPath предоставляет мощные выражения пути для выбора узлов или списка узлов в документах XML.

  • Стандартные функции — XPath предоставляет богатую библиотеку стандартных функций для манипулирования строковыми значениями, числовыми значениями, сравнения даты и времени, манипулирования узлами и QName, манипулирования последовательностями, логическими значениями и т. Д.

  • Основная часть XSLT — XPath является одним из основных элементов в стандарте XSLT и должен обладать знаниями для работы с документами XSLT.

  • Рекомендация W3C — XPath является официальной рекомендацией Консорциума World Wide Web (W3C).

Определения структуры — XPath определяет части документа XML, такие как элемент, атрибут, текст, пространство имен, инструкция обработки, комментарий и узлы документа.

Выражения пути — XPath предоставляет мощные выражения пути для выбора узлов или списка узлов в документах XML.

Стандартные функции — XPath предоставляет богатую библиотеку стандартных функций для манипулирования строковыми значениями, числовыми значениями, сравнения даты и времени, манипулирования узлами и QName, манипулирования последовательностями, логическими значениями и т. Д.

Основная часть XSLT — XPath является одним из основных элементов в стандарте XSLT и должен обладать знаниями для работы с документами XSLT.

Рекомендация W3C — XPath является официальной рекомендацией Консорциума World Wide Web (W3C).

При работе с XPath необходимо учитывать следующие моменты:

  • XPath является основным компонентом стандарта XSLT .
  • XSLT не может работать без XPath.
  • XPath является основой XQuery и XPointer.

XPath — Выражение

Выражение XPath обычно определяет шаблон для выбора набора узлов. Эти шаблоны используются XSLT для выполнения преобразований или XPointer для целей адресации.

Спецификация XPath определяет семь типов узлов, которые могут быть результатом выполнения выражения XPath.

  • корень
  • Элемент
  • Текст
  • атрибут
  • Комментарий
  • Инструкция по обработке
  • Пространство имен

XPath использует выражение пути для выбора узла или списка узлов в документе XML.

Ниже приведен список полезных путей и выражений для выбора любого узла / списка узлов из XML-документа.

S.No. Выражение и описание
1

имя-узла

Выберите все узлы с заданным именем «nodename»

2

/

Выбор начинается с корневого узла

3

//

Выбор начинается с текущего узла, соответствующего выбору

4

,

Выбирает текущий узел

5

..

Выбирает родителя текущего узла

6

@

Выбирает атрибуты

7

ученик

Пример — выбираются все узлы с именем «студент»

8

класс / студент

Пример — выбираются все элементы ученика, которые являются потомками класса

9

//ученик

Выбирает все элементы ученика независимо от того, где они находятся в документе

имя-узла

Выберите все узлы с заданным именем «nodename»

/

Выбор начинается с корневого узла

//

Выбор начинается с текущего узла, соответствующего выбору

,

Выбирает текущий узел

..

Выбирает родителя текущего узла

@

Выбирает атрибуты

ученик

Пример — выбираются все узлы с именем «студент»

класс / студент

Пример — выбираются все элементы ученика, которые являются потомками класса

//ученик

Выбирает все элементы ученика независимо от того, где они находятся в документе

пример

В этом примере мы создали образец XML-документа Students.xml и его таблицы стилей student.xsl, в котором используются выражения XPath в атрибуте select различных тегов XSL для получения значений roll no, firstname, lastname, псевдонима и меток. каждого студенческого узла.

students.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>

students.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>

Проверьте вывод

Вывод выражения XPath

XPath — узлы

В этой главе мы подробно рассмотрим выражение XPath, охватывающее распространенные типы узлов, которые определяет и обрабатывает XPath.

S.No. Тип и описание узла
1 корень

Узел корневого элемента XML-документа.

2 Элемент

Элемент узла.

3 Текст

Текст элемента узла.

4 атрибут

Атрибут элемента узла.

5 Комментарий

Комментарий

Узел корневого элемента XML-документа.

Элемент узла.

Текст элемента узла.

Атрибут элемента узла.

Комментарий

XPath — Абсолютный Путь

Путь расположения указывает местоположение узла в документе XML. Этот путь может быть абсолютным или относительным. Если путь к местоположению начинается с корневого узла или с ‘/’, то это абсолютный путь. Ниже приведены несколько примеров размещения элементов по абсолютному пути.

/ class / student — выбрать студенческие узлы в корневом узле класса.

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

/ class / student / firstname — выберите имя студенческого узла внутри корневого узла класса.

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

пример

В этом примере мы создали образец XML-документа student.xml и его документ таблицы стилей student.xsl, в котором используются выражения XPath.

Ниже приведен пример используемого XML.

students.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>

students.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>

Проверьте вывод

Вывод абсолютного пути XPath

XPath — относительный путь

Путь расположения указывает местоположение узла в документе XML. Этот путь может быть абсолютным или относительным. Если путь к местоположению начинается с выбранного нами узла, то это относительный путь.

Ниже приведено несколько примеров размещения элементов с использованием относительного пути.

Имя — выберите имя, связанное с узлами ученика.

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

пример

В этом примере мы создали образец XML-документа student.xml и его документ таблицы стилей student.xsl, в котором используются выражения XPath.

Ниже приведен пример используемого XML.

students.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>

students.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>

Проверьте вывод

Вывод относительного пути XPath

XPath — Оси

Поскольку путь местоположения определяет местоположение узла, используя абсолютный или относительный путь, оси используются для идентификации элементов по их отношениям, таким как родитель, дочерний элемент , родной брат и т. Д. Оси названы так, потому что они относятся к оси, на которой элементы лежат относительно элемент.

Ниже приведен список различных значений оси.

S.No. Ось и описание
1

предок

Представляет предков текущего узла, которые включают родителей до корневого узла.

2

предок или-я

Представляет текущий узел и его предков.

3

атрибут

Представляет атрибуты текущего узла.

4

ребенок

Представляет дочерние элементы текущего узла.

5

потомок

Представляет потомков текущего узла. Потомки включают дочерние узлы до конечного узла (не более дочерних).

6

потомок или-я

Представляет текущий узел и его потомков.

7

следующий

Представляет все узлы, которые идут после текущего узла.

8

следующая-родственный

Представляет следующие элементы узла контекста. Братья и сестры находятся на том же уровне, что и текущий узел, и совместно используют его родителя.

9

Пространство имен

Представляет пространство имен текущего узла.

10

родитель

Представляет родителя текущего узла.

11

предшествующий

Представляет все узлы, которые идут перед текущим узлом (т. Е. Перед его открывающим тегом).

12

сам

Представляет текущий узел.

предок

Представляет предков текущего узла, которые включают родителей до корневого узла.

предок или-я

Представляет текущий узел и его предков.

атрибут

Представляет атрибуты текущего узла.

ребенок

Представляет дочерние элементы текущего узла.

потомок

Представляет потомков текущего узла. Потомки включают дочерние узлы до конечного узла (не более дочерних).

потомок или-я

Представляет текущий узел и его потомков.

следующий

Представляет все узлы, которые идут после текущего узла.

следующая-родственный

Представляет следующие элементы узла контекста. Братья и сестры находятся на том же уровне, что и текущий узел, и совместно используют его родителя.

Пространство имен

Представляет пространство имен текущего узла.

родитель

Представляет родителя текущего узла.

предшествующий

Представляет все узлы, которые идут перед текущим узлом (т. Е. Перед его открывающим тегом).

сам

Представляет текущий узел.

Ниже приведены несколько примеров использования осей.

Имя — выберите имя, связанное с узлами ученика.

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

пример

В этом примере мы создали образец XML-документа student.xml и его документ таблицы стилей student.xsl, в котором используются выражения XPath.

Ниже приведен пример используемого XML.

students.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>

students.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>

Проверьте вывод

Оси XPath

XPath — Операторы

В этой главе мы подробно рассмотрим операторы и функции XPath, охватывающие часто используемые определения и дескрипторы XPath. XPath определяет операторы и функции для типов Nodes, String, Number и Boolean.

Ниже приведен список, о котором мы собираемся обсудить.

S.No. Операторы / Функции и Описание
1 Операторы сравнения

Операторы сравнения для сравнения значений.

2 Булевы операторы

Булевы операторы для проверки функциональности ‘и’, ‘или’ & ‘not’.

3 Числовые функции / операторы

Операторы / Функции по номерам.

4 Строковые функции

Различные строковые функции.

5 Узел Функции / Операторы

Различные функции и операторы, действующие на узлы.

Операторы сравнения для сравнения значений.

Булевы операторы для проверки функциональности ‘и’, ‘или’ & ‘not’.

Операторы / Функции по номерам.

Различные строковые функции.

Различные функции и операторы, действующие на узлы.

XPath — подстановочный знак

XPath определяет следующие подстановочные знаки на узлах, которые будут использоваться с выражениями XPath.

S.No. WildCard и описание
1

*

используется для сопоставления с любым узлом.

2

,

используется для сопоставления текущего узла в контексте.

3

@ *

используется для соответствия любому атрибуту

4

узел()

используется для сопоставления узла любого типа

*

используется для сопоставления с любым узлом.

,

используется для сопоставления текущего узла в контексте.

@ *

используется для соответствия любому атрибуту

узел()

используется для сопоставления узла любого типа

пример

В этом примере создается таблица элемента <student> с их деталями путем итерации по каждому студенту.

students.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>

students.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>

Проверьте вывод

Форматированный вывод Wild Card

XPath — предикат

Предикат относится к выражению XPath, написанному в квадратных скобках. Это относится к ограничению выбранных узлов в наборе узлов для некоторого условия. Например,

S.No. Предикат и описание
1

/ класс / студент [1]

Выберите первый элемент ученика, который является дочерним элементом элемента класса.

2

/ класс / студент [последняя ()]

Выберите последний элемент студента, который является дочерним элементом элемента класса.

3

/ класс / студент [@rolllno = 493]

Выберите элемент «студент» с помощью rollno 493.

4

/ класс / студент [знаки> 85]

Выберите элемент ученика с отметками> 85.

/ класс / студент [1]

Выберите первый элемент ученика, который является дочерним элементом элемента класса.

/ класс / студент [последняя ()]

Выберите последний элемент студента, который является дочерним элементом элемента класса.

/ класс / студент [@rolllno = 493]

Выберите элемент «студент» с помощью rollno 493.

/ класс / студент [знаки> 85]

Выберите элемент ученика с отметками> 85.

пример

В этом примере создается таблица элемента <student> с их деталями путем итерации по каждому студенту. Он вычисляет положение студенческого узла, а затем печатает данные студента (ов) вместе с серийным номером.