2009-07-16 33 views
5

क्या गुणों से मेल खाना संभव है गुणों के उप-समूह से संबंधित नहीं है? उदाहरण के लिए, मैं सबकुछ मिलान करना चाहता हूं लेकिन @ attr1 और @ attr2। क्या निम्न के जैसा टेम्पलेट मैच स्टेटमेंट लिखने का कोई तरीका है, या क्या मैं इस बारे में गलत तरीके से जा रहा हूं?XSLT कुछ विशेषताओं से मेल नहीं खाता

<xsl:template match="NOT(@attr1) and NOT(@attr2)">  

धन्यवाद

उत्तर

7

सबसे आसान तरीका दो टेम्पलेट का उपयोग करने के लिए होगा:

<xsl:template match="@attr1|@attr2"/> 
<xsl:template match="@*"> 
    .... 
</xsl:template> 

पहले टेम्पलेट उन पर ध्यान नहीं देना चाहते हैं के लिए संदर्भ पकड़ेगा और वह बस उन्हें खाने। दूसरा शेष गुणों से मेल खाता है।

+0

यह बहुत अच्छा काम करता है। धन्यवाद। – Steve

+0

स्क्रिप्ट में किसी अन्य बिंदु पर अगर मैं बहिष्कृत किए गए गुणों को संभालना चाहता हूं। क्या आप जानते हैं कि यह अभी भी संभव है? असल में मेरे पास सैकड़ों विशेषताओं हैं जिन पर मुझे मिलान करने की आवश्यकता है, सभी को एक ही कार्रवाई की आवश्यकता है, और केवल एक बहुत ही छोटे सबसेट को विशेष हैंडलिंग की आवश्यकता है। इसलिए मैं उन लोगों को बाहर करना चाहता हूं जिन्हें विशेष हैंडलिंग की आवश्यकता है, जब तक कि मैं उन्हें संभालने का फैसला नहीं करता। मुझे मूल रूप से केवल विशेषता नाम, और असाइन किए गए मान को मुद्रित करने की आवश्यकता है। – Steve

+1

मैंने वास्तव में उपरोक्त आपके समाधान के साथ संयुक्त मोड का उपयोग कर समस्या हल की। .... ... Steve

2

ओप पूछना संभव है।

<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']"> 
    .... 
</xsl:template> 

यह विशेष रूप से उपयोगी है आप एक विशेषता बदल सकते हैं या इसे जोड़ने अगर याद आ रही एक प्रति आपरेशन के भीतर करना चाहते हैं: निम्नलिखित का प्रयोग करें। दूसरा जवाब ऐसी स्थिति में काम नहीं करता है। जैसे

... 
    <xsl:copy> 
    <xsl:attribute name="attr1"> 
     <xsl:value-of select="'foo'"/> 
    </xsl:attribute> 
    <xsl:apply-templates select="@*[local-name()!='attr1']|node()"/> 
    </xsl:copy> 
    ... 
संबंधित मुद्दे