क्या तत्व का कोई XSLT नाम है?


101

XSLT में है

<xsl:value-of select="expression"/>

एक तत्व का मूल्य पाने के लिए, लेकिन क्या तत्व के टैग-नाम का चयन करना है?

इस तरह की स्थिति में:

<person>
  <!-- required stuff -->
  <name>Robert</name>
  <!-- optional stuff, free form for future extension. 
       Using XMLSchema's xsd:any -->
  <profession>programmer</profession>
  <hobby>photography</hobby>
</person>

<xsl:for-each select="person">
   <xsl:tag-of select="."/> : <xsl:value-of select="."/>
</xsl:for-each>

इस तरह उत्पादन प्राप्त करने के लिए:

name : Robert
profession : programmer
hobby : photography

बेशक उपरोक्त XSLT संकलन नहीं करेगा क्योंकि

 <xsl:tag-of select="expression"/>

मौजूद नहीं है। लेकिन यह कैसे किया जा सकता है?


इस सवाल का सबसे प्रासंगिक टैग XPath है। दोनों कार्य XPath मानक कार्य हैं और किसी भी होस्टिंग भाषा (C #, XSLT, XQuery, ...) के संदर्भ में XPath अभिव्यक्ति के भीतर इस्तेमाल किए जा सकते हैं, कृपया, फिर से टैग करें
दिमित्रे Novatchev

यह पाठ: "XSLT में <xsd: value-of select =" अभिव्यक्ति "/>" है - जिसमें कोई त्रुटि है। XSLT निर्देशों के लिए आमतौर पर इस्तेमाल किया जाने वाला उपसर्ग "xsl" है। आमतौर पर XML स्कीमा का उपयोग करते समय हम उपसर्ग "xsd" या "xs" का उपयोग करते हैं। कृपया सही करें।
दिमित्रे नोवत्चेव

जवाबों:


157

यह आपको वर्तमान तत्व नाम (टैग नाम) देगा

<xsl:value-of select ="name(.)"/>

OP-Edit: यह भी करेगा ट्रिक:

<xsl:value-of select ="local-name()"/>

12
स्थानीय-नाम वह है जो आप 10 में से 9 बार चाहते हैं
annakata

20
स्थानीय-नाम संस नामस्थान है, यही कारण है कि यह आमतौर पर बेहतर है।
जॉन डब्ल्यू

102

किसी ने कार्यों के शब्दार्थ में सूक्ष्म अंतर को इंगित नहीं किया name()और local-name()

  • name(someNode) नोड का पूरा नाम देता है, और इसमें उपसर्ग और बृहदान्त्र शामिल होता है यदि नोड एक तत्व या विशेषता है।
  • local-name(someNode) नोड का केवल स्थानीय नाम लौटाता है, और इसमें नोड या एक गुण होने की स्थिति में उपसर्ग और बृहदान्त्र शामिल नहीं होता है।

इसलिए, ऐसी स्थितियों में जहां एक नाम दो अलग-अलग नामस्थानों से संबंधित हो सकता है, किसी को name()इन नामों को अभी भी प्रतिष्ठित करने के लिए फ़ंक्शन का उपयोग करना चाहिए ।

और, BTW, दोनों कार्यों को बिना किसी तर्क के निर्दिष्ट करना संभव है :

name() के लिए एक संक्षिप्त नाम है name(.)

local-name() के लिए एक संक्षिप्त नाम है local-name(.)

अंत में , याद रखें कि न केवल तत्वों और विशेषताओं के नाम हैं, इन दो कार्यों का उपयोग पीआई पर भी किया जा सकता है और इन पर वे समान हैं)।


15
<xsl:for-each select="person">
  <xsl:for-each select="*">
    <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/>
  </xsl:for-each>  
</xsl:for-each>

एक अच्छे अभ्यास के रूप में हमेशा नोड-x का मूल्य प्राप्त करते समय सामान्य-स्थान () का उपयोग करें <xsl: value of-select = "normalize-space (।)" /> यह अतिरिक्त स्थानों को ट्रिम कर देगा
SO उपयोगकर्ता

इस तरह के सामान्यीकरण / स्वच्छताकरण की आवश्यकता तभी होगी जब इसे इनपुट एकत्रित करने के चरण में नियंत्रित नहीं किया गया हो। ऐसा करना तब इसे एक्सेस टाइम पर करने से बचाता है, जो आमतौर पर कहीं अधिक होता है। एक RDB में जोड़ने से पहले एक करना होगा, और एक xml दस्तावेज़ सिर्फ एक और डेटाबेस है।
पतंजलि

9

रुचि रखने वालों के लिए:

<xsl:tag-of select="."/>

हालाँकि आप टैग / तत्व को फिर से बना सकते हैं:

<xsl:element name="{local-name()}">
  <xsl:value-of select="substring(.,1,3)"/>
</xsl:element>

यह एक xslt टेम्पलेट में उपयोगी है जो उदाहरण के लिए विभिन्न तत्वों के बहुत सारे डेटा मानों को प्रारूपित करता है। जब आप उस तत्व का नाम नहीं जानते हैं जिस पर काम किया जा रहा है और आप अभी भी उसी तत्व का उत्पादन कर सकते हैं, और यदि आवश्यक हो तो मूल्य को संशोधित कर सकते हैं।


6
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>

तो यह मतदान क्यों होगा? यदि आप नाम स्थान भी नहीं चाहते हैं, तो स्थानीय नाम () का उल्लेख किया जा सकता है, लेकिन यह व्यापक समुदाय के लिए उपयोगी होगा कि यह क्यों काम नहीं करेगा।
रोलैंड शॉ

शायद, यह दिए गए XML को रूपांतरित नहीं कर सका। नाम (।) इस मामले में "व्यक्ति" होगा। यह "नाम", "पेशा" और "शौक" होना चाहिए।
रे लू

@CodeMelt क्यों आपने स्वीकार किए गए उत्तर को रद्द नहीं किया? यह अच्छा है, लेकिन इससे भी कम विशिष्ट है। मैंने रॉलैंड शॉ के जवाब को वोट दिया क्योंकि यह प्रश्न का उत्तर प्रदान करता है। दुर्दशा, केवल तब उकसाएं जब एक असवर गलत, गलत या भ्रामक जानकारी
रखता है

4
उस मामूली विस्तार को निश्चित रूप से - व्यक्तिगत रूप से, मुझे लगता है कि लोगों को यह समझाना चाहिए कि क्यों कुछ कम किया जाता है, क्योंकि यह सामूहिक ज्ञान को समझाने में मदद करता है ...
रॉलैंड शॉ

हमारी प्रतिष्ठा ध्यान आकर्षित कर सकती है, लेकिन जैसा कि वे कोई गारंटी नहीं है कि हमने जो पोस्ट किया है वह सार्थक है, यह हमारे योगदान की गुणवत्ता है जो वास्तव में मायने रखता है। खराब गुणवत्ता योगदान के लिए कोई तर्क नहीं देता है।
पतंजलि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.