XPath'de "/ node ()" ve "node ()" arasındaki fark nedir?
XPath anlayışıma göre, herhangi bir HTML veya XML belgesi için: bu, bağlam düğümünün bir çocuğu olan düğümü döndürmek
$x("/node()")
anlamına $x("/child::node()")
gelir. Burada kök düğüm (/)
, bağlamsal düğümdür. Bu nedenle, html
öğeyi döndürür .
$x("node()")
$x("child::node()")
aynı html
öğeyi döndüren anlamına gelir . Ancak bu durumda, yukarıdaki durumda olduğu gibi bağlam düğümünü sağlamadık. Öyleyse, bu durumda bağlam düğümünü nasıl tanımlar?
Ayrıca, yukarıdaki XPath ifadelerinin her ikisi de sözdizimsel ve işlevsel olarak aynıdır.
Yanıtlar
Aradaki fark, /node()
bağlam düğümünü kesinlikle belge kökü ( /
) olarak belirtmesi , ancak node()
örtük, göreceli bir bağlam düğümüne dayanmasıdır.
Örtülü, göreceli bir bağlam düğümü nasıl belirlenir? Bağlama göre. ;-) Örneğin, barındırma dili tipik olarak ilk bağlam düğümünü eşleşen veya yinelenen geçerli düğüme ayarlar. Daha sonra, XPath'in kendi değerlendirmesi dahilinde, her konum adımı (eğik çizgilerle ayrılmış /
), sonraki adımlar için bağlam düğümünü oluşturur.
$x(path, [startNode])Krom konsolunda kullanılan notasyon açıkça bağlam düğümü belirtmek için kullanılabilecek opsiyonel bir ikinci argüman alır. Varsayılan olarak, belge kök düğümüne eşittir, bu da belirli bir belge için aynı sonuçları döndürdüğü $x("node()")
ve $x("/node()")
döndürdüğü gözlemlenen davranışa yol açar .
Ayrıca, yukarıdaki XPath ifadelerinin her ikisi de sözdizimsel ve işlevsel olarak aynıdır.
Açıkça node()
ve child::node()
vardır sözdizimsel evet öyleler, farklı, ancak semantik (ya da işlevsel olarak dediğiniz gibi) çünkü aynı child::
eksen varsayılan eksenidir.
Ayrıca bakınız
- XSLT / XPath'deki mevcut düğüm ve Bağlam düğümü?
- XML'deki kök düğüm, kök öğe ve belge öğesi arasındaki fark nedir?
- XPath'de .// ve // * arasındaki fark nedir?