मैं एक्सएसएलटी के लिए काफी नया हूं और इसलिए मैं जानना चाहता हूं कि किसी विशेषता के अस्तित्व की जांच करने के लिए सबसे अच्छा अभ्यास क्या है। मेरा एक्सएमएल ऐसा कुछ दिखता है:एक्सएसएलटी यदि विशेषता मौजूद है/अन्य
<root>
<languages>
<lang id="EN">English<lang>
<lang id="FR">French<lang>
<lang id="DE">German</lang>
</languages>
<items>
<item lang="EN">test 1</item>
<item>test 2</item>
<item lang="FR">item 3</item>
</items>
</root>
ध्यान दें कि 'आइटम' तत्व के लिए 'लैंग' विशेषता वैकल्पिक है।
अब मैं एक-लूप का उपयोग कर वस्तुओं के माध्यम से लूप करना चाहता हूं, जबकि यह जांच कर रहा है कि इसमें "लैंग" -ट्रिब्यूट है या नहीं। यदि ऐसा होता है, तो मैं आईडी का उपयोग कर पूरी स्ट्रिंग लाने के लिए चाहता हूं (उदाहरण के लिए एन -> 'अंग्रेजी')। यदि विशेषता सेट नहीं है, तो मैं इसे "कोई भाषा सेट" या कुछ समान लिखना नहीं चाहता हूं।
अब मैं निम्नलिखित कोड का उपयोग करता हूं लेकिन मैं खुद से पूछताछ कर रहा हूं कि यह अधिक कुशल तरीके से नहीं किया जा सकता है।
<xsl:for-each select="//root/items/item">
<xsl:variable name="cur_lang" select="@lang" /> <!-- first I store the attr lang in a variable -->
<xsl:choose>
<xsl:when test="@lang"> <!-- then i test if the attr exists -->
<xsl:value-of select="//root/languages/lang[@id=$cur_lang]" /> <!-- if so, parse the element value -->
</xsl:when>
<xsl:otherwise>
No language set <!-- else -->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
कोई सुझाव/टिप्स?
आप का एक उदाहरण जोड़ सकते हैं (अच्छी तरह से गठित होने के लिए निर्धारित) आपके द्वारा प्रदान किए गए इनपुट को सटीक आउटपुट क्या दिया जाना चाहिए? –
कार्लो, आप वांछित आउटपुट प्रदान करना भूल गए - मैंने सोचा कि आप विस्तारित भाषा स्ट्रिंग को मौजूदा 'lang' विशेषता मान को प्रतिस्थापित करना चाहते हैं। कृपया * संपादित करें * प्रश्न संपादित करें और वांछित परिणाम प्रदान करें जब प्रदान किए गए XML दस्तावेज़ पर परिवर्तन लागू किया गया हो। –