2010-10-15 12 views
9

अगर मैं इस तरह एक स्रोत फ़ाइल है:एक्सएसएलटी के साथ वाइल्डकार्ड मैचों को आप कैसे करते हैं?

<animal name="fred_monkey" /> 
<animal name="jim_banana" /> 
<animal name="joe_monkey" /> 

मैं जो स्ट्रिंग उनके नाम में '_monkey' के साथ ही जानवरों का चयन करता है मेरी स्टाइलशीट में एक xpath एक्सप्रेशन कर सकता हूँ?

उदा वाइल्डकार्ड मैच '* _monkey'?

+0

XSLT के किन संस्करणों का उपयोग करते हैं? –

+0

अच्छा सवाल, +1। एक्सएसएलटी 1.0 और एक्सएसएलटी 2.0 समाधान के लिए मेरा जवाब देखें।:) –

+0

@iYasha मैं वर्तमान में 1.0 का उपयोग कर रहा हूं, लेकिन दोनों के बीच अंतर सीखने में रूचि रखता हूं। –

उत्तर

26

मैं अपने स्टाइलशीट जो उनके नाम में स्ट्रिंग '_monkey' के साथ ही जानवरों का चयन करता है में एक xpath एक्सप्रेशन कर सकता हूँ?

उदा वाइल्डकार्ड मैच '* _monkey'?

यह वाइल्डकार्ड का मतलब एक स्ट्रिंग, नहीं स्ट्रिंग वाली "_monkey" "_monkey" के साथ समाप्त।

उपयोग:

//animal[ends-with(@name, '_monkey')] 

ऊपर मानक XPath 2.0 समारोह ends-with() उपयोग करता है और केवल XSLT 2.0 में इस प्रकार उपलब्ध है।

//animal[substring(@name, string-length(@name) -6)='_monkey'] 

यह // संक्षिप्त नाम का उपयोग करने के रूप में इस अक्षम मूल्यांकन में हो सकता है अनुशंसित नहीं है:

XSLT 1.0 में निम्नलिखित XPath 1.0 अभिव्यक्ति का उपयोग करें। जब भी XML दस्तावेज़ की संरचना ज्ञात होती है तो स्थान परीक्षणों की अधिक विशिष्ट श्रृंखला का उपयोग करें। उदाहरण के लिए, यदि animal तत्वों XML दस्तावेज़, फिर निम्न XPath के शीर्ष तत्व के सभी बच्चों (2.0 या 1.0, क्रमशः) कर रहे हैं भाव और अधिक कुशल हो सकता है:

/*/animal[ends-with(@name, '_monkey')] 

और

/*/animal[substring(@name, string-length(@name) -6)='_monkey'] 

एक की विशिष्ट जरूरतों पर निर्भर करता है (उदाहरण के लिए आप वास्तव में मतलब था "शामिल है" और नहीं "के साथ समाप्त होता"), कार्यों contains(), starts-with() और substring() भी उपयोगी हो सकता है:

contains(someString, someTargetString) 

starts-with(someString, someTargetString) 

substring(someString, start-index, length) = someTargetString 

अंत में, match<xsl:templates> की विशेषता में एक पूर्ण XPath अभिव्यक्ति शामिल करने की आवश्यकता नहीं है - केवल एक सापेक्ष XPath अभिव्यक्ति जो पर्याप्त संदर्भ निर्दिष्ट करती है, का उपयोग करने की अनुशंसा की जाती है।

इस प्रकार

, ऊपर मैच भाव के रूप में इस्तेमाल के रूप में कुछ हो जाएगा:

<xsl:template match="animal[ends-with(@name, '_monkey')]"> 

और

<xsl:template match= 
    "animal[substring(@name, string-length(@name) -6)='_monkey']"> 
+0

अच्छा जवाब। धन्यवाद! विस्तारित स्पष्टीकरण के लिए –

+3

+1। –

+0

मैं इसका उपयोग कैसे कर सकता हूं: ' 'एक्सएसएलटी 1.0 में? – Si8

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