SORU
20 HAZİRAN 2009, CUMARTESİ


XSLT/XPath Bağlam düğüm düğüm vs geçerli mi?

XSLT, arasındaki fark nedir "düğüm" ve "bağlam düğüm"? güncel Her iki terim kullanılır burada bulabilirsiniz: http://www.w3.org/TR/xslt.

Ne zaman birini ya da diğerini kullanırsınız? Nasıl her bahsediyorsun?

CEVAP
20 HAZİRAN 2009, CUMARTESİ


Geçerli düğüm şablonu şu anda üzerinde çalıştığı her neyse. Normalde bu da bağlam düğüm oluyor, ama bağlam düğüm iç içe bir XPath ifadesi içinde özel bir anlamı (köşeli parantez kısmı) vardır. Orada, şu anda bir maç için test ediliyor ne ifade eder. Dolayısıyla, bağlam XPath ifadesi içinde değişiklik, ancak geçerli düğüm düğüm.

Bağlam düğüm nokta (.) kısaltılmış ya da bazen tamamen bırakmış olabilir. Bu iç içe geçmiş bir ifade dışında, bir nokta geçerli düğüm anlamına gelir çünkü muhtemelen biraz kafa karıştırıcı. (Bu durumda geçerli düğüm geçerli düğüm yalnızca yaklaşık olduğunu söyleyebilir yani bağlam düğüm olacak, ve daha düzgün bağlam düğüm denir. Ama bile spec geçerli düğüm buraya çağırır.)

Bir nokta bağlam düğüm, iç içe geçmiş bir XPath ifadesi yer vererek, kullanıcının geçerli düğüm için geri başvurmak için bir yol ihtiyacı olan bir tek geçerli şablon tarafından işlenmekte. current() işlevi ile bunu yapabilirsiniz.

Bu iki ayırt edici bazı durumlarda yararlıdır. Örneğin, bu gibi bazı XML olduğunu varsayalım:

<a>
    <b>
        <c>foo<footnote fn="1"/></c>
        <d>bar</d>
    </b>
    <b>
        <c>baz</c>
        <d>aak<footnote fn="2"/></d>
    </b>
    <b>
        <c>eep</c>
        <d>blech<footnote fn="2"/></d>
    </b>
    <footnote-message fn="1">Batteries not included.</footnote>
    <footnote-message fn="2">Some assembly required.</footnote>
</a>

Şimdi bu gibi Lateks dönüştürmek istediğinizi varsayalım:

foo\footnote{Batteries not included.}
bar

baz
aak\footnote{Some assembly required.}

eep
blech\footnotemark[2]

Hile Dipnot zaten kullanılmış olup olmadığını söyle. Eğer bu Dipnot karşılaştık ilk kez, \footnote Bir komut yazmak istiyorum; aksi takdirde \footnotemark Bir komut yazmak istiyorum. Bu gibi XSL kodu kullanabilirsiniz:

<xsl:choose>
    <xsl:when test="count(preceding::*[./@fn = current()/@fn]) = 0">\footnote{...}</xsl:when>
    <xsl:otherwise>\footnotemark[...]</xsl:otherwise>
</xsl:choose>

Burada bağlam-düğüm fn öznitelik (preceding::* düğüm-kümesi sonuçlarından) geçerli düğüm fn öznitelik için karşılaştırma yapıyoruz. (Aslında ./@fn;*.* 14) diyebiliriz söylemek zorunda değilsin

Yani Kısacası, bağlam düğüm XPath yüklem içinde bırakır; geçerli düğüm yüklem dışında, düğüm geçerli şablon tarafından işlenmekte geri ulaşır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DigitalRev TV

    DigitalRev T

    30 AĞUSTOS 2007
  • KSI

    KSI

    25 Temmuz 2009
  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005