2008-09-16 10 views
7

मैं कई xsl:import रों के साथ एक xslt स्टाइलशीट है और मैं उन सभी को एक xslt फ़ाइल में मर्ज करना चाहते हैं।मर्ज कई xslt स्टाइलशीट

यह प्रणाली हम प्रयोग कर रहे हैं, जहां यह स्मृति में संग्रहीत एक स्ट्रिंग वस्तु के रूप में XSL स्टाइलशीट चारों ओर से गुजरता है की एक सीमा है। यह रिमोट मशीन पर प्रेषित होता है जहां यह परिवर्तन करता है। चूंकि इसे डिस्क से लोड नहीं किया जा रहा है, इसलिए href लिंक टूटा हुआ है, इसलिए हमें स्टाइलशीट से xsl:import एस को निकालना होगा।

क्या वहां कोई उपकरण हैं जो यह कर सकते हैं?

उत्तर

15

आप अपनी स्टाइलशीट मर्ज करने के लिए एक एक्सएसएल स्टाइलशीट का उपयोग कर सकते हैं। हालांकि, यह xsl का उपयोग करने के बराबर है: तत्व शामिल करें, xsl नहीं: आयात (जैसा कि Azat Razetdinov पहले से ही इंगित किया गया है)। आप here अंतर पर पढ़ सकते हैं।

इसलिए आपको पहले xsl को प्रतिस्थापित करना चाहिए: xsl के साथ आयात: शामिल है, किसी भी विवाद को हल करें और परीक्षण करें कि आपको अभी भी सही परिणाम मिलते हैं या नहीं। उसके बाद, आप अपनी मौजूदा स्टाइलशीट को एक में मर्ज करने के लिए निम्न स्टाइलशीट का उपयोग कर सकते हैं। दस्तावेज़ समारोह है, जो href विशेषता में संदर्भित फ़ाइल में पढ़ता का उपयोग करके शामिल स्टाइलशीट साथ के शामिल हैं: बस अपने मास्टर स्टाइलशीट में इसे लागू:

<?xml version="1.0" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       version="1.0"> 

<xsl:template match="xsl:include"> 
    <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/> 
</xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

पहले टेम्पलेट सभी XSL बदल देता है। दूसरा टेम्पलेट identity transformation है।

मैंने इसे Xalan के साथ परीक्षण किया है और ऐसा लगता है कि यह ठीक काम करता है।

+1

यह काम नहीं कर रहा है शामिल के रूप में नीचे संबंधित पथ है, तो: कोई इन परिदृश्यों के लिए भी रास्ता? – Shiv

0

आप क्यों चाहेंगे? वे आम तौर पर एक कारण के लिए अलग-अलग होते हैं (अक्सर रखरखाव)

आप हमेशा मर्ज लिख सकते हैं - एक्सएसएल फाइलों को पढ़ सकते हैं, अपनी रुचि रखने वाले टेम्पलेट आइटम का चयन करें और एक नई मास्टर एक्सएसएल फ़ाइल को लिखें .. ।

+0

उपयोगकर्ता बताता है: "(फ़ाइल है) रिमोट मशीन पर प्रेषित जहां यह परिवर्तन करता है।चूंकि इसे डिस्क से लोड नहीं किया जा रहा है, इसलिए href लिंक टूटा हुआ है " –

+0

मैंने कारण शामिल करने के लिए quetion संपादित किया। चूंकि यह उत्तर उस संपादन से पहले पोस्ट किया गया था। – roo

1

मैनुअल मर्ज शायद सबसे अच्छा विकल्प होने जा रहा है।

मुख्य विचार शायद लगता है कि मिलान टेम्पलेट्स के लिए तर्क संयुक्त स्टाइलशीट में काम करता है बनाने के लिए किया जाएगा।

+0

यही वह था जिसे मैं डरता था: \ – roo

2

यह import precedence को तोड़ने के बिना मुख्य फ़ाइल में आयात stylsheets शामिल करने के लिए असंभव है। उदाहरण के लिए, आप एक आयातित स्टाइलशीट में एक शीर्ष-स्तरीय चर परिभाषित करते हैं और इसे मुख्य फ़ाइल में फिर से परिभाषित करते हैं। यदि आप दो फाइलों को एक में विलय करते हैं, तो आपको एक ही नाम और आयात प्राथमिकता के साथ दो चर मिलेगा, जिसके परिणामस्वरूप एक त्रुटि होगी। आयात XSL के साथ की: के शामिल है और किसी भी conflicts हल

वैकल्पिक हल दो XSL की जगह है। उसके बाद आप XSL को बदलने के लिए सुरक्षित कर रहे हैं:

शामिल किए जाने के एक्सएमएल पेड़ स्तर पर काम करता है: क्योंकि है कि क्या XSLT-processor does है इसी फ़ाइलों की सामग्री के साथ निर्देश शामिल हैं। Href विशेषता मान द्वारा स्थित संसाधन को XML दस्तावेज़ के रूप में पार्स किया गया है, और xsl के बच्चे: इस दस्तावेज़ में स्टाइलशीट तत्व xsl को प्रतिस्थापित करता है: दस्तावेज़ सहित तत्व शामिल करें। तथ्य यह है कि टेम्पलेट नियम या परिभाषाओं को शामिल किया गया है, जिस तरह से संसाधित किए जाते हैं, उससे प्रभावित नहीं होता है।

-1
import multiple xsl in single xsl 

     <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/> 
     <xsl:apply-imports/> 

<calypso:keyword> 
       <calypso:name>DisplayOptionStyle</calypso:name> 
<calypso:value>Vanilla</calypso:value> 
</calypso:keyword> 

      <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/> 
      <xsl:apply-imports/>