2011-04-26 16 views
13

मैं सामान्य रूप में XSLT को नया हूँ तो मेरे साथ सहन कृपया ...एक्सएसएलटी: यदि टैग मौजूद है, तो टेम्पलेट लागू करें; यदि नहीं, तो स्थिर मान चुनें

मन में है कि साथ

, मुझे क्या करना कोशिश कर रहा हूँ एक्सएमएल में एक निश्चित टैग के लिए जाँच है। यदि यह है तो मैं एक टेम्पलेट लागू करना चाहता हूं। यदि नहीं, तो मैं इसे जोड़ना चाहता हूं (एक खाली मूल्य के रूप में)। मूल रूप से इसे अंतिम आउटपुट में हमेशा मजबूर करना पड़ता है। यह मैं कैसे करूंगा?

मैं कुछ इस तरह था ...

<xsl:choose> 
    <xsl:when test="@href"> 
     <xsl:apply-templates select="country" /> 
    </xsl:when> 
    <xsl:otherwise> 
    </xsl:otherwise> 
</xsl:choose> 

कोड के शीर्ष poriton मैं क्या लगता है कि मैं गलत है। otherwise टैग में कुछ चाहिए और मेरा when भाग गलत है मुझे लगता है।

<xsl:template match="country"> 
    <xsl:if test=". != '' or count(./@*) != 0"> 
     <xsl:copy-of select="."/> 
    </xsl:if> 
</xsl:template> 

क्या कोई मदद कर सकता है? पहले ही, आपका बहुत धन्यवाद।

संपादित करें:

अंत मैं बहुत कम से कम एक <country /> टैग पर जरूरत XML में होने के लिए हाँ। लेकिन यह संभव है कि यह सभी पर मौजूद न हो। यदि यह अस्तित्व में नहीं है, तो मुझे इसे अंदर रखना होगा। उदाहरण के लिए अच्छा इनपुट <country>US</country>

+0

दो इनपुट नमूने पोस्ट करने पर विचार करें (डेटा मौजूद होने के साथ, दूसरा डेटा गायब होने के साथ), फिर हमें वह आउटपुट दिखाएं जिसे आप दोनों के लिए बनाना चाहते हैं।फिर हम उचित एक्सएसएलटी के साथ मदद कर सकते हैं। मुझे डर है कि आपका वर्तमान विवरण "एक निश्चित टैग की जांच करना" बहुत सटीक नहीं है और यह कहना मुश्किल है कि ' आपकी आवश्यकताओं को पूरा करता है। यह जांच करेगा कि संदर्भ नोड में 'href' विशेषता है जबकि "टैग" ध्वनियों की जांच करना है, जिन्हें आप कुछ तत्व नोड के लिए जांचना चाहते हैं। आपके 'अन्यथा' में आप शायद ' foo' परिणाम el –

+0

'' गलत है, मुझे विश्वास है कि –

+0

अच्छा प्रश्न, +1। वर्तमान में स्वीकार किए गए एक से भी कम और सरल समाधान के लिए मेरा उत्तर देखें। मेरे समाधान में बिल्कुल कोई एक्सएसएलटी सशर्त निर्देश नहीं हैं! –

उत्तर

12

मूल तत्व के लिए टेम्पलेट में देश तत्व का उपयोग करने की अपेक्षा की जाती है उदा।

<xsl:template match="foo"> 
    <xsl:if test="not(country)"> 
    <country>US</country> 
    </xsl:if> 
    <xsl:apply-templates/> 
</xsl:template> 

के बजाय foo पेरेंट तत्व के नाम का उपयोग करें। और निश्चित रूप से आप तत्व की प्रतिलिपि बनाने जैसी अन्य चीजें भी कर सकते हैं, मैंने if चेक पर ध्यान केंद्रित किया है। मेरे दृश्य में आपको xsl:choose/when/otherwise की वास्तव में आवश्यकता नहीं है, xsl:if पर्याप्त होना चाहिए क्योंकि लागू-टेम्पलेट्स उन तत्वों के साथ कुछ भी नहीं करेंगे जो मौजूद नहीं हैं।

+0

मैंने कुछ बहुत ही समान किया .... इसलिए आपको लगता है कि सही जवाब मिलता है। इस के लिए समय महत्वपूर्ण था इसलिए मैंने इसे सही तक नहीं किया जब तक कि यह सही न हो। लेकिन वैसे भी thx। –

+0

क्या होगा यदि मैं देखना चाहता हूं कि यह मौजूद नहीं है या यह मौजूद है तो खाली है? – SearchForKnowledge

+0

@SearchForKnowledge, एक्सएमएल इनपुट के आवश्यक विवरण और परिणाम के साथ एक नया, अलग प्रश्न पूछने पर विचार करें। –

6

आपको किसी भी प्रकार की Conditional Processing की आवश्यकता भी नहीं है। यह स्टाइलशीट:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="item[not(country)]"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
      <country>Lilliput</country> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

इस इनपुट के साथ:

<root> 
    <item> 
     <country>Brobdingnag</country> 
    </item> 
    <item> 
     <test/> 
    </item> 
</root> 

आउटपुट:

<root> 
    <item> 
     <country>Brobdingnag</country> 
    </item> 
    <item> 
     <test></test> 
     <country>Lilliput</country> 
    </item> 
</root> 
11

भी सरल:

<xsl:template match="foo[not(country)]"> 
     <country>US</country> 
    <xsl:apply-templates/> 
</xsl:template> 

ध्यान दें है:

नहीं XSLT सशर्त निर्देश (जैसे <xsl:if> के रूप में) उपयोग किया जाता है और वे आवश्यक नहीं हैं।

अक्सर, <xsl:if> या <xsl:choose> की उपस्थिति एक संकेत है कि अन्य चीजों के साथ, सशर्त निर्देशों से छुटकारा पाने के लिए कोड को दोबारा संशोधित किया जा सकता है और इसमें काफी सुधार किया जा सकता है।

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