XML belgesi:
<Home>
<Addr>
<Street>ABC</Street>
<Number>5</Number>
<Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
</Addr>
</Home>
XPath ifadesi:
//*[contains(text(), 'ABC')]
//*
herhangi maçları soyundan eleman ait kök düğümü . Yani, kök düğüm dışında herhangi bir eleman.
[...]
bir yüklemdir , düğüm kümesini filtreler. Bunun için bu düğümlerin döndürür ...
olduğu true
:
Bir yüklem, bir düğüm kümesini [...] süzerek yeni bir düğüm kümesi oluşturur. Filtrelenecek düğüm kümesindeki her düğüm için PredicateExpr değerlendirilir [...]; PredicateExpr bu düğüm için true olarak değerlendirilirse, düğüm yeni düğüm kümesine dahil edilir; aksi takdirde dahil edilmez.
contains('haystack', 'needle')
döndürür true
eğer haystack
içeriyor needle
:
İşlev: boolean içerir (dize, dize)
Birinci argüman dizesi ikinci argüman dizesini içeriyorsa, include işlevi true değerini, aksi halde false değerini döndürür.
Ancak contains()
bir dizeyi ilk parametresi olarak alır. Ve düğümler geçti. İlk parametre olarak iletilen her düğüm veya düğüm kümesinin işlev tarafından bir dizeye dönüştürülmesiyle başa çıkmak için string()
:
Bir bağımsız değişken, string işlevini çağırıyormuş gibi string türüne dönüştürülür.
string()
fonksiyon döner string-value
ve ilk birleşme noktası :
Düğüm kümesi, düğüm kümesinde, belge düzeninde ilk sırada yer alan düğümün dize değeri döndürülerek bir dizeye dönüştürülür. Düğüm kümesi boşsa, boş bir dize döndürülür.
string-value
bir eleman düğümü :
Bir eleman düğümünün dize değeri, öğe düğümünün tüm metin düğümü torunlarının dize değerlerinin belge düzeninde bir araya getirilmesidir.
string-value
bir metin düğümü :
Metin düğümünün dize değeri karakter verisidir.
Yani, temelde string-value
bir düğümde bulunan tüm metinler (tüm alt metin düğümlerinin birleştirilmesi).
text()
herhangi bir metin düğümü ile eşleşen bir düğüm testidir:
Düğüm testi metni () herhangi bir metin düğümü için doğrudur. Örneğin, child :: text (), bağlam düğümünün metin düğümü alt öğelerini seçer.
Bunu söyledikten sonra //*[contains(text(), 'ABC')]
, ilk metin düğümü içeren herhangi bir öğeyle (kök düğüm hariç) eşleşir ABC
. Çünkü text()
, bağlamsal düğümün (ifadenin değerlendirildiği göreceli olarak) tüm alt metin düğümlerini içeren bir düğüm kümesi döndürür. Ama contains()
sadece ilkini alır. Yani yukarıdaki belge için yol Street
öğeyle eşleşir .
Aşağıdaki ifade //*[text()[contains(., 'ABC')]]
, en az bir alt metin düğümü olan herhangi bir öğeyle (kök düğüm hariç) eşleşir ABC
. .
bağlam düğümünü temsil eder. Bu durumda, kök düğüm dışında herhangi bir öğenin alt metin düğümüdür. Yani yukarıdaki belge için yol Street
, ve Comment
öğelerle eşleşir .
Şimdi //*[contains(., 'ABC')]
, ABC
(alt metin düğümlerinin birleşiminde ) içeren herhangi bir öğeyle (kök düğüm hariç) eşleşir . Eşleştiği Yukarıdaki belgede için Home
, Addr
, Street
, ve Comment
elemanları. Bunun gibi, //*[contains(., 'BLAH ABC')]
maçları Home
, Addr
ve Comment
elemanları.
//*[contains(text(),'ABC')]
sadece<Street>
elemanı döndürür .<Street>
Veya öğesinin atalarını döndürmez<Comment>
.