2009-06-20 13 views
62

एक्सएसएलटी में, "वर्तमान नोड" और "संदर्भ नोड" के बीच क्या अंतर है? आप यहां इस्तेमाल किए गए दोनों शब्द पा सकते हैं: http://www.w3.org/TR/xsltएक्सएसएलटी/XPath में वर्तमान नोड बनाम संदर्भ नोड?

आप एक या दूसरे का उपयोग कब करेंगे? आप प्रत्येक को कैसे संदर्भित करते हैं?

उत्तर

68

वर्तमान नोड जो भी टेम्पलेट वर्तमान में चल रहा है वह है। आम तौर पर यह संदर्भ नोड भी होता है, लेकिन संदर्भ नोड में घोंसला वाले XPath अभिव्यक्ति (वर्ग ब्रैकेट में भाग) के भीतर विशेष अर्थ होता है। वहां, यह संदर्भित करता है कि वर्तमान में किसी भी नोड को एक मैच के लिए परीक्षण किया जा रहा है। इसलिए, संदर्भ नोड XPath अभिव्यक्ति के भीतर बदलता है, लेकिन वर्तमान नोड नहीं।

संदर्भ नोड को डॉट (.) के साथ संक्षिप्त रूप से संक्षिप्त किया जा सकता है या कभी-कभी पूरी तरह से छोड़ा जा सकता है। यह शायद थोड़ा उलझन में है, क्योंकि नेस्टेड अभिव्यक्ति के बाहर, एक बिंदु वर्तमान नोड को दर्शाता है। (उस स्थिति में वर्तमान नोड संदर्भ नोड होता है, इसलिए कोई कह सकता है कि यह वर्तमान नोड केवल निकट है, और इसे संदर्भ नोड कहा जाता है। लेकिन यहां तक ​​कि spec भी इसे वर्तमान नोड कहता है।)

चूंकि एक बिंदु आपको संदर्भ नोड देता है, एक नेस्टेड XPath अभिव्यक्ति में उपयोगकर्ता को वर्तमान नोड को संदर्भित करने के लिए एक तरीका चाहिए, जिसे वर्तमान टेम्पलेट द्वारा संसाधित किया जा रहा है। आप इसे current() फ़ंक्शन के माध्यम से कर सकते हैं।

कुछ मामलों में इन दोनों को अलग करना उपयोगी है।

foo\footnote{Batteries not included.} 
bar 

baz 
aak\footnote{Some assembly required.} 

eep 
blech\footnotemark[2] 

चाल है बताओ कि क्या एक फुटनोट पहले से ही इस्तेमाल किया गया है या:

<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> 

अब आप LaTeX के लिए इसे इस तरह परिवर्तित करना चाहते हैं लगता है: उदाहरण के लिए, अगर आप इस तरह कुछ एक्सएमएल है लगता है नहीं। यदि यह पहली बार है कि आपने फुटनोट का सामना किया है, तो आप \footnote कमांड लिखना चाहते हैं; अन्यथा आप \footnotemark कमांड लिखना चाहते हैं। आप इस तरह XSL कोड इस्तेमाल कर सकते हैं:

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

यहाँ हम वर्तमान नोड के लिए संदर्भ नोड fn विशेषता (preceding::* नोड सेट के परिणाम से) तुलना कर रहे हैं fn विशेषता।

तो संक्षेप में, संदर्भ नोड XPath विधेय के अंदर आप छोड़ देता है, (आप बस @fn कह सकते हैं आप वास्तव में ./@fn कहने के लिए नहीं है।); वर्तमान नोड वर्तमान टेम्पलेट द्वारा संसाधित नोड पर वापस, भविष्य के बाहर पहुंचता है।

+1

यह स्वयं अक्ष से कैसे संबंधित है? – Devela

संबंधित मुद्दे