Xpath. Temel sözdizimi. XPath sorgu dili XPath sorgu örnekleri

  • 20.06.2020

Xpath, bir belgenin xml veya xhtml öğeleri için bir sorgu dilidir. SQL gibi, xpath da bildirimsel bir sorgu dilidir. İlgilenilen verileri almak için, bu verileri açıklayan bir sorgu oluşturmanız yeterlidir. Tüm "kirli" işler sizin için xpath dil tercümanı tarafından yapılacaktır.
Çok uygun, değil mi? Web sayfası düğümlerine erişmek için xpath'in neler sunduğuna bir göz atalım.

Web sayfası ana bilgisayarlarına istekte bulunma

Bir web sayfasına xpath isteklerinin oluşturulmasını göstereceğim küçük bir laboratuvar çalışmasını dikkatinize sunuyorum. Verdiğim istekleri tekrar edebilecek ve en önemlisi kendi isteklerinizi yerine getirmeye çalışabileceksiniz. Bu sayede makalenin xpath by xml'ye aşina olan yeni başlayanlar ve programcılar için eşit derecede ilginç olacağını umuyorum.

Laboratuvar için ihtiyacımız olan:
- xhtml web sayfası;
- Eklentileri olan Mozilla Firefox tarayıcısı;
- ateş böceği;
- yangın Yolu ;
(görsel xpath destekli başka bir tarayıcı kullanabilirsiniz)
- az zaman.

Deney için bir web sayfası olarak World Wide Web Consortium ("http://w3.org") sitesinin ana sayfasını öneriyorum. xquery(xpath) dillerini, xhtml spesifikasyonunu ve diğer birçok İnternet standardını geliştiren bu organizasyondur.

Bir görev
xpath sorgularını kullanarak w3.org ana sayfasının xhtml kodundan konsorsiyum konferans bilgilerini alın.
xpath sorguları yazmaya başlayalım.
İlk XPath İsteği
FireBug'da Firepath yer imini açın, seçici ile analiz edilecek öğeyi seçin, tıklayın: Firepath, seçilen öğe için bir xpath sorgusu oluşturdu.

İlk etkinliğin başlığını seçtiyseniz, istek şu şekilde olacaktır:

Gereksiz dizinleri kaldırdıktan sonra, sorgu "başlık" türünün tüm öğeleriyle eşleşecektir.

Firepath, sorguyla eşleşen öğeleri vurgular. Hangi belge düğümlerinin sorguyla eşleştiğini gerçek zamanlı olarak görebilirsiniz.

Konferans yerleri hakkında bilgi talebi:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Sponsor listesini şu şekilde alıyoruz:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

xpath sözdizimi

Oluşturduğumuz sorgulara geri dönelim ve nasıl çalıştıklarını görelim.
İlk sorguya daha yakından bakalım.

Bu sorguda, xpath'in yeteneklerini göstermek için üç parçaya ayırdım. (Parçalara bölme gelenekseldir)

İlk kısım
.// - mevcut bağlamdan hiyerarşinin sıfır veya daha fazla düzeyine özyinelemeli iniş. Bizim durumumuzda, geçerli bağlam belge köküdür.

İkinci kısım
* - herhangi bir element
[@id="w3c_home_upcoming_events"]– "w3c_home_upcoming_events"e eşit bir id özniteliğine sahip bir düğümü aramamıza dayanan bir yüklem. XHTML öğe kimlikleri benzersiz olmalıdır. Bu nedenle, "belirli bir kimliğe sahip herhangi bir öğe" sorgusu, aradığımız tek düğümü döndürmelidir.

değiştirebiliriz * tam ana bilgisayar adına div bu istekte
div[@id="w3c_home_upcoming_events"]

Böylece, belge ağacından div[@id="w3c_home_upcoming_events"] ihtiyacımız olan düğüme iniyoruz. DOM ağacının hangi düğümlerden oluştuğunu ve yukarıda kaç hiyerarşi seviyesinin kaldığını kesinlikle umursamıyoruz.

üçüncü kısım
/ul/li/div/p/a–xpath - belirli bir öğeye giden yol. Yol, adresleme adımlarından ve düğüm kontrol koşullarından (ul, li, vb.) oluşur. Adımlar "/" (eğik çizgi) ile ayrılır.

Koleksiyonlar
Bir yüklem veya adresleme adımları kullanarak ilgilenilen düğüme erişmek her zaman mümkün değildir. Çoğu zaman, aynı hiyerarşi seviyesinde aynı türden birkaç düğüm vardır ve “yalnızca birinci” veya “yalnızca ikinci” düğümlerin seçilmesi gerekir. Bu gibi durumlar için koleksiyonlar sağlanır.

xpath koleksiyonları, bir öğeye dizinine göre erişmenizi sağlar. Dizinler, öğelerin kaynak belgede sunulduğu sıraya karşılık gelir. Koleksiyonlardaki sıra sayısı birden sayılır.

"Mekan"ın her zaman "toplantı adı"ndan sonraki ikinci paragraf olduğu gerçeğinden yola çıkarak aşağıdaki sorguyu alırız:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Burada p, /ul/li/div listesindeki her düğüm için kümedeki ikinci öğedir.

Benzer şekilde, bir sorgu ile sponsorların bir listesini alabiliriz:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Bazı xpath işlevleri
xpath, bir koleksiyon içindeki öğelerle çalışmak için birçok işleve sahiptir. Bunlardan sadece birkaçını aktaracağım.

geçen():
Koleksiyonun son öğesini döndürür.
ul/li/div/p - sorgusu, "ul" listesindeki her düğüm için son paragrafları döndürür.
first() işlevi sağlanmadı. İlk öğeye erişmek için "1" dizinini kullanın.

Metin():
Öğenin test içeriğini döndürür.
.//a - "Arşiv" metnine sahip tüm bağlantıları alın.

pozisyon() ve mod:
position() - kümedeki bir öğenin konumunu döndürür.
mod, bölümün geri kalanıdır.

Bu işlevleri birleştirerek şunları elde edebiliriz:
- ul/li öğeleri bile yok
- eşit elemanlar: ul/li

Karşılaştırma işlemleri

  • < - логическое «меньше»
  • > - mantıksal "büyüktür"
  • <= - логическое «меньше либо равно»
  • >= - mantıksal "büyüktür veya eşittir"
ul/li , ul/li - 3. sayıdan başlayarak öğeleri listeler ve bunun tersi de geçerlidir.

kendi başına

Şunları almaya çalışın:
- soldaki "Standartlar" menüsünden URL bağlantıları bile;
- w3c.org'un ana sayfasındaki ilk haber hariç tüm haberlerin manşetleri.

PHP5'te Xpath

$dom = yeni DomDocument(); $dom->loadHTML($HTMLCode); $xpath = yeni DomXPath($dom); $_res = $xpath->query(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $nesne) ( echo "URL: ".$obj->getAttribute("href"); echo $obj->nodeValue; )

Nihayet

Basit bir örnekle, xpath'in web sayfası düğümlerine erişme gücünü gördük.
Xpath, xml ve xhtml öğelerine, xslt dönüşümlerine erişmek için endüstri standardıdır.
Herhangi bir html sayfasını ayrıştırmak için kullanabilirsiniz. Kaynak html kodu önemli biçimlendirme hataları içeriyorsa, onu iletin.

Steno XPath Sözdizimi

XPath sözdizimi kısayolları oldukça kullanışlı olabilir. Kurallar aşağıdadır:

Self::node() olarak kısaltılabilir. ;

Parent::node(), .. olarak kısaltılabilir;

Child::childname, childname olarak kısaltılabilir;

Attribute::childname @childname olarak kısaltılabilir;

/descendant-or-self::node()/, // olarak kısaltılabilir.

Örneğin, .//PLANET konum yolu self::node()/descendant-or-self::node()/child::PLANET için kısa yoldur. Ayrıca , like , vb. gibi yüklem ifadesini de kısaltabilirsiniz. XPath konum yollarıyla çalışmak, kısayol sözdizimi sayesinde çok daha kolaydır. Aşağıdaki liste, kısaltılmış sözdizimini kullanan birkaç konum yolu örneğini listeler:

PLANET alt öğeleri döndürür bağlam düğümü;

* bağlam düğümünün tüm alt öğelerini döndürür;

Text(), bağlam düğümünün tüm alt metin düğümlerini döndürür;

@UNITS, bağlam düğümünün UNITS özniteliğini döndürür;

@* bağlam düğümünün tüm özniteliklerini döndürür;

PLANET üçüncü çocuğu geri getiriyor bağlam düğümü;

PLANET son çocuğu geri getiriyor bağlam düğümü;

*/PLANET tüm torunları döndürür bağlam düğümü;

/PLANETS/PLANET/NAME ikinci öğeyi döndürür üçüncü eleman eleman

//PLANET tüm çocukları döndürür Doküman kaynağı;

PLANETS//PLANET alt öğeleri döndürür alt öğeler bağlam düğümü;

//PLANET/NAME tüm öğeleri döndürür ebeveyni olan

Bağlam düğümünün kendisini döndürür;

.//PLANET alt öğeleri döndürür bağlam düğümü;

Bağlam düğümünün üst öğesini döndürür;

../@UNITS, bağlam düğümünün üst öğesinin UNITS özniteliğini döndürür;

.//.. bağlam düğümünün çocuğunun tüm ebeveynlerini ve bağlam düğümünün ebeveynini döndürür;

PLANET çocukları geri getiriyor ;

PLANET çocukları geri getiriyor Çocuğu olan bağlam düğümü "Venüs" e eşit metinle;

PLANET[@UNITS="days"] tüm çocukları döndürür " gün " değerine sahip bir UNITS özniteliğine sahip bir bağlam düğümü;

PLANET[@UNITS="days"] altıncı çocuğu döndürür Yalnızca bu alt öğenin "gün" değerine sahip bir UNITS özniteliğine sahip olması durumunda bir bağlam düğümü. PLANET[@UNITS="days"] ;

PLANET[@COLOR ve @UNITS] tüm çocukları döndürür COLOR özniteliği ve UNITS özniteliği olan bir bağlam düğümü;

" //PLANET " tüm öğeleri seçer değeri önceki herhangi bir öğenin değerinden farklı olan

* herhangi bir elemanı seçer , ebeveyninin ilk çocuğu olan;

*[@UNITS], bağlam düğümünün UNITS özniteliğine sahip ilk beş alt öğesini seçer.

Visual Basic® .NET ile Veritabanlarını İşleme kitabından yazar McManus Geoffrey P

Ruby Dilinde Programlama kitabından [Dil İdeolojisi, Teorisi ve Uygulama Pratiği] yazar Fulton Hal

Yazarın PHP El Kitabından

XSLT kitabından yazar Holzner Stephen

Kısaltılmış Sözdizimi Kalıplar için eksen kısaltması için iki kural vardır: child::childname, childname olarak kısaltılabilir; öznitelik::çocukadı @çocukadı olarak kısaltılabilir.Aşağıdaki liste, kısaltılmış sözdizimi kalıplarının birkaç örneğini listeler; bölümün sonunda göreceksiniz

XSLT Teknolojisi kitabından yazar Valikov Aleksey Nikolayeviç

Steno Yüklem Sözdizimi Yüklem ifadeleri "position()=" atlanarak kısaltılabilir. Örneğin, olur, olur, vb. Kısaltılmış sözdizimini kullanmak, yüklemlerde XPath ifadelerini kullanmayı çok daha kolaylaştırır. İşte bir satır

C++ kitabından. Tarif koleksiyonu yazar Diggins Christopher

Yazarın kitabından

XPath Numaraları XPath, sayıları çift duyarlıklı kayan nokta biçiminde saklar. Resmi tanıma göre, XPath sayıları IEEE 754 64-bit çift duyarlıklı kayan nokta biçiminde saklanmalıdır ve tüm sayılar kayan nokta sayıları olarak depolanır.

Yazarın kitabından

XPath Eksenlerini Uygulama Şimdiye kadar konum adımlarının üç bölümünü ele aldık - eksen, düğüm koşulu ve yüklem. Seçim kalıplarıyla yaptığımız çalışmadan bu öğelere aşina olmalısınız, ancak önceki örnekte, kardeşten önceki eksene dikkat edin. Hala

Yazarın kitabından

XPath İfadelerini Test Etme Xalan paketi, bir belgeye XPath ifadesi uygulamanıza ve sonuca bakmanıza izin veren, test ederken çok yardımcı olan, ApplyXPath.java adlı kullanışlı bir örnek program içerir. Bu örneği çalıştırmak için, şu durumlarda ApplyXPath.java'yı ApplyXPath.class'ta derlemeniz gerekir:

Xpath- bildirimsel sorgu dili elementlere xml veya (x)html belge ve xslt dönüşümler.

Yararlı kaynaklar:

Rusça Xpath 1.0 için tam spesifikasyon burada - http://citforum.ru/internet/xpath/xpath.shtml.

Xpath Çevrimiçi Test Cihazı - http://www.xpathtester.com/xpath/

Firebug'da Xpath'i Kullanma

DOM öğelerini XPath ile aramak için Firebug'un yerleşik bir işlevi vardır:

$x(xpath [, contextNode [, resultType]])

Sonuç türü:

XPathResult.NUMBER_TYPE XPathResult.STRING_TYPE XPathResult.BOOLEAN_TYPE XPathResult.FIRST_ORDERED_NODE_TYPE XPathResult.UNORDERED_NODE_ITERATOR_TYPE

Firebug'da XPATH sorgularını kullanmaya bir örnek:

$x("//tr[@veri-yer]/@veri-yer").değer $x("string(//tr[@veri-yer]/@veri-yer)")

Örnekler

//div //a //*/ata-veya-kendi::düğmesi

Temel Sözdizimi

yollar

. # mevcut bağlam.// # özyinelemeli olarak alçalma (geçerli bağlamdan sıfır veya daha fazla seviye) /html/body # mutlak yol tablosu//a # göreceli yol a # mevcut bağlama göreli yol //* # mevcut bağlamdaki her şey li/* /a # li'nin "torunları" olan bağlantılar //a|//button # bağlantılar ve düğmeler (iki düğüm kümesini birleştirir)

ilişkiler

a/i/parent::p # acil ebeveyn,

p/ancestor::* # tüm ebeveynler (http://bit.ly/1ta7mh9) p/following-sibling::* # takip eden tüm kardeşler p/preceding-sibling::* # önceki tüm kardeşler p/following::* # sonraki tüm öğeler (http://bit.ly/1ta83H5) p/preceding::* # atalar hariç tüm önceki öğeler p/descendant-or-self::* # bağlam düğümü ve tüm alt öğeleri p/ancestor- or-self::* # bağlam düğümü ve tüm ataları

Düğüm Alma

/div/text() # metin düğümlerini al /div/text() # ilk metin düğümünü al

eleman konumu

a # ilk öğe a # son öğe a[i] # öğeyi içeren ikinci bağlantı a # İlk 3 bağlantı ul # ilk elemanı "OK" değerini içeren bir liste (UL) tr # eleman bile değil tr # çift eleman p/text() # ikinci metin düğümü

Özellikler ve filtreler

Filtreleme öğelerini gösterir

Input[@type=text] # niteliklerinin önüne @ input[@class="OK"] # p # niteliksiz paragraflar *[@style] # stil niteliği a[ olan tüm öğeler. = "Tamam"] # "Tamam" değerine sahip bağlantılar a/@id # bağlantı kimlikleri a/@* # tüm bağlantı öznitelikleri a[@id ve @rel] # kimlik ve rel özniteliklerini içeren bağlantılar a[@id][ @rel] # aynen bir # bağlantı bir öğe içerir veya

Fonksiyonlar

Çekirdek Xpath İşlevleri - http://www.w3.org/TR/xpath/#corelib

Ad() # dönüş öğesi adı dize(val) dize(a/@id) # öznitelik değerini al substring(val, from, to) substring(@id, 1, 6) # dizenin kesme kısmı substring-after(val, from ) substring-after(@id, "FROM") substring-before string-length() # dizedeki karakter sayısını döndürür count() # öğelerin sayısını döndürür concat() normalize-space() # benzer trim, boşlukları kaldırır Örnek: -with() include() translate("bar","abc","ABC") # BAr

Matematik

//p[ pozisyon() = kat(son() div 2 + 0.5) veya pozisyon() = tavan(last() div 2 + 0.5) ] //tr pozisyon() # div # bölme mod # bölme tavanın kalanı () # minimum tamsayı tabanı() # maksimum tamsayı turu() toplam()

gruplama

(tablo/tbody/tr) # son satır tüm tablolardan (//h1|//h2) # "Metin" içeren birinci veya ikinci düzey başlık

Bileşik filtre koşulları

XPath, bir XML belgesindeki düğümleri ve düğüm kümelerini seçmek için yol ifadelerini kullanır. Bir düğüm, önceden belirlenmiş bir yol veya sözde adımlar izlenerek seçilir.

Örnek XML Belgesi

XPath sözdizimini göstermek için aşağıdaki XML belgesi kullanılacaktır:

Hatırlatma Mektup göndermek!

Ynt: Hatırlatma mektup gönderildi

düğüm seçimi

Bir XML belgesindeki düğümleri seçmek için XPath yol ifadelerini kullanır. Verilen yol izlenerek düğüm seçilir. En kullanışlı yol ifadeleri:

Aşağıdaki tablo, örnek XML belgesinde bazı seçimler yapmanıza izin veren bazı XPath ifadelerini listeler:

XPath ifadesi Sonuç
mesajlar "Mesajlar" adlı tüm düğümleri seçer
/mesajlar Mesajların kök öğesini seçer
Not: Yol bir eğik çizgi (/) ile başlıyorsa, her zaman öğeye giden mutlak yolu temsil eder!
mesajlar/not Mesajlar öğesinin alt öğeleri olan tüm not öğelerini seçer
// Not Belgenin neresinde olursa olsun tüm not öğelerini seçer
mesajlar//not Mesajlar öğesinden nerede olduklarına bakılmaksızın, mesajlar öğesinin alt öğeleri olan tüm not öğelerini seçer
//@tarih Tarih adlı tüm nitelikleri seçer

yüklemler

Tahminler, belirli bir düğümü veya belirli bir değere sahip bir düğümü bulmanızı sağlar.

Tahminler her zaman köşeli parantez içine alınır.

Aşağıdaki tabloda, örnek XML belgesine karşı seçim yapılmasına izin veren yüklemlerle birlikte bazı XPath ifadeleri listelenmektedir:

XPath ifadesi Sonuç
/mesajlar/not Mesajlar öğesinin doğrudan alt öğesi olan ilk not öğesini seçer.
Not: IE 5,6,7,8,9'da ilk düğüm olurdu , ancak W3C'ye göre olması gerekir . IE'de bu sorunu çözmek için SelectionLanguage seçeneğini XPath olarak ayarlamanız gerekir.
JavaScript'te: xml.setProperty("SelectionLanguage","XPath");
/mesajlar/not Mesajlar öğesinin doğrudan alt öğesi olan son not öğesini seçer.
/mesajlar/not Mesajlar öğesinin doğrudan alt öğesi olan sondan bir önceki not öğesini seçer.
/mesajlar/not Tarih özniteliğine sahip tüm başlık öğelerini seçer
//başlık[@date="10/01/2008"] "01.10.2008" değerine sahip bir tarih özniteliğine sahip tüm başlık öğelerini seçer

Önceden bilinmeyen düğümlerin seçimi

Bir XML belgesinde önceden bilinmeyen düğümleri bulmak için XPath, özel karakterlerin kullanılmasına izin verir.

Aşağıdaki tabloda, örnek XML belgesine karşı seçim yapılmasına izin veren özel karakterlere sahip bazı XPath ifadeleri listelenmektedir:

Çoklu yol seçimi

Operatörü kullanma | XPath ifadesinde birden çok yol seçmenize olanak tanır.

Aşağıdaki tabloda, örnek XML belgesinde seçim yapmanıza izin veren bazı XPath ifadeleri listelenmiştir.




Bilgisayar yardım sitesi

© Telif hakkı 2022,
rzdoro.ru - Bilgisayar yardım sitesi

  • Kategoriler
  • Ütü
  • Windows 10
  • Tarama
  • Windows 7
  • Ütü
  • Windows 10
  • Tarama
  • Windows 7