xslt

2010-07-21 14 views
24

में सरणी बनाने के लिए सरणी बनाई जा सकती है और xslt में उपयोग की जा सकती है? यदि अध्ययन के लिए ऑनलाइन उपयुक्त उदाहरण हैं? यदि नहीं है तो मूल्यों को स्टोर करने का कोई तरीका है जो किसी सरणी की नकल करता है?xslt

+0

अच्छा प्रश्न (+1)। सरणी XPath (और XSLT) डेटा प्रकार के निकटतम विस्तृत विवरण के लिए मेरा उत्तर देखें। –

उत्तर

23

एक्सएसएलटी 2.0 के साथ आप किसी भी डेटा प्रकार को मॉडल कर सकते हैं जिसे आप चाहते हैं।

उदाहरण के रूप में:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" omit-xml-declaration="yes"/> 
    <xsl:variable name="array" as="element()*"> 
     <Item>A</Item> 
     <Item>B</Item> 
     <Item>C</Item> 
    </xsl:variable> 
    <xsl:template match="/"> 
     <xsl:value-of select="$array[2]"/> 
    </xsl:template> 
</xsl:stylesheet> 
किसी भी इनपुट के साथ

, उत्पादन:

B 

XSLT 1.0 में Temporaly ट्री डेटा प्रकार परिणाम नहीं है। एक परिणाम ट्री फ्रैगमेंट डेटा प्रकार है जो नोड-सेट ऑपरेटर की अनुमति नहीं देता है। इसलिए, जाने का एकमात्र तरीका विस्तार कार्यों के साथ है: इस मामले में EXSLT से node-set() (एमएसएक्सएसएल में अंतर्निहित node-set() एक्सटेंशन भी है)।

तो, एक्सएसएलटी 1.0 में एक्सटेंशन के बिना आप केवल इनलाइन डेटा मॉडल, या पैराम्स या बाहरी दस्तावेज़ द्वारा प्राप्त कर सकते हैं।

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" omit-xml-declaration="yes"/> 
    <xsl:variable name="inline-array"> 
     <Item>A</Item> 
     <Item>B</Item> 
     <Item>C</Item> 
    </xsl:variable> 
    <xsl:param name="array" select="document('')/*/xsl:variable[@name='inline-array']/*"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="$array[2]"/> 
    </xsl:template> 
</xsl:stylesheet> 

परिणाम, किसी भी इनपुट के साथ: उदाहरण के रूप में

B 

आप के लिए, मैं तुम्हें एक XSLT 1.0 प्लस एक्सटेंशन उदाहरण प्रदान कर सकते हैं (यह standar नहीं है ...)

+1

@Alejandro - जो मैं देख सकता हूं, आप बस _name_ 'array' का उपयोग कर रहे हैं जो तत्व नोड्स का संग्रह है। – Oded

+2

@ ओडेड: यह सही है! यह ** डेटा मॉडलिंग ** की अवधारणा है। सरणी डेटा प्रकारों की मुख्य विशेषता यादृच्छिक पहुंच है। यह मॉडल शो के रूप में कवर करता है। –

+0

@Alejandro - कुछ सरणी नामकरण यह एक सरणी नहीं बनाता है। एक्सएसएल में से एक को सबसे नज़दीकी चीज एक नोड-सेट है। – Oded

5

नहीं, ऐसा नहीं। निकटतम अवधारणा नोड-सेट है, जो नोड्स के संग्रह हैं। जब भी चयन का नतीजा कई नोड्स होता है, तो आपको नोड-सेट मिलता है। इन्हें इंडेक्स नोटेशन (1 से शुरू) के साथ एक्सेस किया जा सकता है, इसलिए नोड-सेट के पहले तत्व को selectedNodes[1] जैसे नोटेशन के साथ एक्सेस किया जा सकता है।

+0

मुझे लगता है कि यह पूरी तरह से सही नहीं है। मेरा जवाब जांचें। –

6
चाहते सिर्फ अगर

(1 to 10)[3] 
:

XPath 2.0 अनुक्रम (XSLT में 2 + उपलब्ध है) एक सरणी के निकटतम बात है

का मूल्यांकन करता है करने के लिए 3

('a', 'b', 'a', 'c')[3] 

'a'

एक दृश्य की वस्तुओं का मूल्यांकन किसी भी बोधगम्य प्रकार XPath में अनुमति के हो सकते हैं, अनुक्रम में ही इसके अपवाद हैं - नेस्टेड दृश्यों की अनुमति नहीं है।

ध्यान दें करो: दृश्यों सरणियों के रूप में ही नहीं हैं:

  1. दृश्यों अपरिवर्तनीय हैं। अनुक्रम पर कोई भी अद्यतन ऑपरेशन (किसी आइटम को जोड़ना या तैयार करना, कोई आइटम डालना या किसी आइटम को निकालना) एक नया अनुक्रम उत्पन्न करता है।

  2. एन-वें आइटम तक पहुंच का समय ओ (1) होने की गारंटी नहीं है क्योंकि यह सरणी के लिए है, और ओ (एन) हो सकता है।

+0

+1 अच्छा जवाब! मुझे बाद में एहसास हुआ है कि मैं अनुक्रम डेटा प्रकार भूल गया। मैं डेटा मॉडलिंग के विचार का बचाव चूक गया। –

+0

@Alejandro: "डेटा मॉडलिंग" क्या है? :) –

+0

मेरे अंग्रेजी में क्षमा करें। मुझे सार डेटा प्रकार कहना चाहिए। –