XPath - Hızlı Kılavuz
XPath öğrenmeden önce, XSL'yi anlamalıyız. Extensible Sstil sayfası Language. CSS HTML'ye olduğu için XML'e benzer.
XSL ihtiyacı
HTML belgeleri söz konusu olduğunda, etiketler tablo, div, span vb. Gibi önceden tanımlanır. Tarayıcı, bunlara nasıl stil ekleyeceğini ve CSS stillerini kullanarak bunları nasıl görüntüleyeceğini bilir. Ancak XML belgeleri söz konusu olduğunda, etiketler önceden tanımlanmamıştır. Bir XML belgesini anlamak ve biçimlendirmek için,World Wide Web Consortium (W3C)XML tabanlı bir Stil Sayfası Dili olarak hareket edebilen XSL geliştirdi. Bir XSL belgesi, bir tarayıcının bir XML belgesini nasıl oluşturması gerektiğini belirtir.
Aşağıda XSL'nin ana bölümleri verilmiştir -
XSLT - XML belgelerini diğer çeşitli belge türlerine dönüştürmek için kullanılır.
XPath - XML belgelerinde gezinmek için kullanılır.
XSL-FO - XML belgelerini biçimlendirmek için kullanılır.
XPath nedir?
XPath, World Wide Web Konsorsiyumu'nun (W3C) resmi bir önerisidir. Bir XML dosyasında bilgi bulmak için bir dil tanımlar. Bir XML belgesinin öğelerini ve niteliklerini geçmek için kullanılır. XPath, XML belgesinden ilgili bilgileri sorgulamak için kullanılabilen çeşitli ifade türleri sağlar.
Structure Definitions - XPath, bir XML belgesinin öğe, nitelik, metin, ad alanı, işleme talimatı, yorum ve belge düğümleri gibi parçalarını tanımlar
Path Expressions - XPath, XML belgelerindeki düğümleri veya düğümlerin listesini seçen güçlü yol ifadeleri sağlar.
Standard Functions - XPath, dizi değerlerinin, sayısal değerlerin, tarih ve saat karşılaştırmasının, düğümün ve QName işleminin, sıra işleminin, Boole değerlerinin vb. İşlenmesi için standart işlevlerden oluşan zengin bir kitaplık sağlar.
Major part of XSLT - XPath, XSLT standardının en önemli unsurlarından biridir ve XSLT belgeleriyle çalışmak için bilgi sahibi olması gerekir.
W3C recommendation - XPath, World Wide Web Consortium'un (W3C) resmi bir önerisidir.
XPath ile çalışırken aşağıdaki noktalar akılda tutulmalıdır -
- XPath, XSLT standardının temel bileşenidir .
- XSLT, XPath olmadan çalışamaz.
- XPath, XQuery ve XPointer'ın temelidir.
Bir XPath ifadesi genellikle bir düğüm kümesi seçmek için bir model tanımlar. Bu desenler, dönüşümleri gerçekleştirmek için XSLT tarafından veya amaca yönelik olarak XPointer tarafından kullanılır.
XPath belirtimi, XPath ifadesinin yürütülmesinin çıktısı olabilecek yedi tür düğüm belirtir.
- Root
- Element
- Text
- Attribute
- Comment
- İşleme Talimatı
- Namespace
XPath, bir XML belgesinden düğüm veya düğüm listesi seçmek için bir yol ifadesi kullanır.
Aşağıda, bir XML belgesinden herhangi bir düğüm / düğüm listesi seçmek için yararlı yollar ve ifadelerin listesi verilmiştir.
S.No. | İfade ve Açıklama |
---|---|
1 | node-name Verilen "düğüm adı" adlı tüm düğümleri seçin |
2 | / Seçim kök düğümden başlar |
3 | // Seçim, seçimle eşleşen geçerli düğümden başlar |
4 | . Mevcut düğümü seçer |
5 | .. Mevcut düğümün ebeveynini seçer |
6 | @ Öznitelikleri seçer |
7 | student Örnek - "öğrenci" adındaki tüm düğümleri seçer |
8 | class/student Örnek - Sınıfın çocukları olan tüm öğrenci öğelerini seçer |
9 | //student Belgenin neresinde olurlarsa olsunlar tüm öğrenci öğelerini seçer |
Misal
Bu örnekte, bir örnek XML belgesi, student.xml ve stil sayfası belgesi oluşturduk students.xsl XPath ifadelerini kullanan select Her öğrenci düğümünün rulo no, ad, soyadı, takma adı ve işaretleri değerlerini almak için çeşitli XSL etiketlerinin özniteliği.
öğrenciler.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>
öğrenciler.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>
Çıkışı doğrulayın
Bu bölümde, yaygın Node türleri, XPath tanımlamaları ve tutamaçlarını kapsayan XPath ifadesini ayrıntılı olarak göreceğiz.
S.No. | Düğüm Tipi ve Açıklaması |
---|---|
1 | Kök Bir XML Belgesinin kök öğe düğümü. |
2 | Eleman Eleman düğümü. |
3 | Metin Bir eleman düğümünün metni. |
4 | Öznitelik Bir eleman düğümünün niteliği. |
5 | Yorum Yap Yorum Yap |
Konum yolu, XML belgesindeki düğümün konumunu belirtir. Bu yol, mutlak veya göreceli olabilir. Konum yolu kök düğümle veya '/' ile başlıyorsa, mutlak bir yoldur. Aşağıda, öğeleri mutlak yol kullanarak konumlandıran örneklerden birkaçı verilmiştir.
/class/student - sınıf kök düğümündeki öğrenci düğümlerini seçin.
<xsl:for-each select = "/class/student">
/class/student/firstname - sınıf kök düğümündeki bir öğrenci düğümünün ilk adını seçin.
<p><xsl:value-of select = "/class/student/firstname"/></p>
Misal
Bu örnekte, örnek bir XML belgesi oluşturduk students.xml ve stil sayfası belgesi students.xsl XPath ifadelerini kullanan.
Aşağıda kullanılan örnek XML verilmiştir.
öğrenciler.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>
öğrenciler.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>
Çıkışı doğrulayın
Konum yolu, XML belgesindeki düğümün konumunu belirtir. Bu yol, mutlak veya göreceli olabilir. Konum yolu seçtiğimiz düğümle başlıyorsa, göreceli bir yoldur.
Aşağıda, öğeleri göreli yol kullanarak konumlandıran birkaç örnek verilmiştir.
firstname - öğrenci düğümleriyle ilgili adı seçin.
<p><xsl:value-of select = "firstname"/></p>
Misal
Bu örnekte, örnek bir XML belgesi oluşturduk students.xml ve stil sayfası belgesi students.xsl XPath ifadelerini kullanan.
Aşağıda kullanılan örnek XML verilmiştir.
öğrenciler.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>
öğrenciler.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>
Çıkışı doğrulayın
Konum yolu, bir düğümün konumunu mutlak veya göreli yol kullanarak tanımladığından, eksenler, öğeleri aşağıdaki gibi ilişkileriyle tanımlamak için kullanılır. parent, child, sibling, vb. Eksenler, öğelerin bir öğeye göre üzerinde yattığı ekseni ifade ettikleri için böyle adlandırılır.
Aşağıda çeşitli Eksen değerlerinin listesi verilmiştir.
S.No. | Eksen ve Açıklama |
---|---|
1 | ancestor Kök düğüme kadar olan üst öğeleri içeren geçerli düğümün atalarını temsil eder. |
2 | ancestor-or-self Geçerli düğümü ve onun atalarını temsil eder. |
3 | attribute Geçerli düğümün niteliklerini temsil eder. |
4 | child Geçerli düğümün alt öğelerini temsil eder. |
5 | descendant Geçerli düğümün soyundan gelenleri temsil eder. Torunlar, düğümün yaprak düğümüne kadar olan çocuklarını içerir (artık çocuk yok). |
6 | descendant-or-self Geçerli düğümü ve onun soyundan gelenleri temsil eder. |
7 | following Geçerli düğümden sonra gelen tüm düğümleri temsil eder. |
8 | following-sibling Bağlam düğümünün aşağıdaki kardeşlerini temsil eder. Kardeşler, mevcut düğüm ile aynı seviyededir ve ebeveynini paylaşır. |
9 | namespace Geçerli düğümün ad alanını temsil eder. |
10 | parent Geçerli düğümün ebeveynini temsil eder. |
11 | preceding Geçerli düğümden önce gelen tüm düğümleri temsil eder (yani etiketin açılmasından önce). |
12 | self Mevcut düğümü temsil eder. |
Aşağıda, eksenlerin kullanımına ilişkin birkaç örnek verilmiştir.
firstname - öğrenci düğümleriyle ilgili adı seçin.
<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
Misal
Bu örnekte, örnek bir XML belgesi oluşturduk students.xml ve stil sayfası belgesi students.xsl XPath ifadelerini kullanan.
Aşağıda kullanılan örnek XML verilmiştir.
öğrenciler.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>
öğrenciler.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>
Çıkışı doğrulayın
Bu bölümde, yaygın olarak kullanılan XPath'i kapsayan ayrıntılı olarak XPath operatörlerini ve işlevlerini göreceğiz. defines ve handles. XPath, Düğümler, Dize, Sayı ve Boole türlerinde Operatörleri ve işlevleri tanımlar.
Aşağıda tartışacağımız liste var.
S.No. | Operatörler / Fonksiyonlar ve Açıklama |
---|---|
1 | Karşılaştırma Operatörleri Değerleri karşılaştırmak için karşılaştırma operatörleri. |
2 | Boole Operatörleri Boole operatörleri 've', 'veya' & 'değil' işlevlerini kontrol eder. |
3 | Sayı Fonksiyonları / Operatörler Sayılarla ilgili Operatörler / Fonksiyonlar. |
4 | String Fonksiyonları Çeşitli dizi işlevleri. |
5 | Düğüm İşlevleri / Operatörleri Düğümlere etki eden çeşitli işlevler ve operatörler. |
XPath, XPath ifadeleriyle kullanılacak düğümlerde aşağıdaki joker karakterleri tanımlar.
S.No. | WildCard ve Açıklama |
---|---|
1 | * herhangi bir düğümle eşleşmek için kullanılır. |
2 | . geçerli düğümü bağlamda eşleştirmek için kullanılır. |
3 | @* herhangi bir özelliği eşleştirmek için kullanılır |
4 | node() herhangi bir türdeki düğümü eşleştirmek için kullanılır |
Misal
Bu örnek, her öğrenciyi yineleyerek ayrıntılarıyla birlikte bir <öğrenci> öğesi tablosu oluşturur.
öğrenciler.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>
öğrenciler.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>
Çıkışı doğrulayın
Dayanak, köşeli parantez içinde yazılan XPath ifadesini ifade eder. Bazı koşullar için bir düğüm kümesindeki seçili düğümleri kısıtlamayı ifade eder. Örneğin,
S.No. | Dayanak ve Açıklama |
---|---|
1 | /class/student[1] Sınıf öğesinin alt öğesi olan ilk öğrenci öğesini seçin. |
2 | /class/student[last()] Sınıf öğesinin alt öğesi olan son öğrenci öğesini seçin. |
3 | /class/student[@rolllno = 493] Rollno 493 ile öğrenci öğesini seçin. |
4 | /class/student[marks>85] > 85 işaretli öğrenci öğesini seçin. |
Misal
Bu örnek, her öğrenciyi yineleyerek ayrıntılarıyla birlikte bir <öğrenci> öğesi tablosu oluşturur. Öğrenci düğümünün konumunu hesaplar ve ardından öğrenci (ler) ayrıntılarını seri no.
öğrenciler.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>
öğrenciler.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>