2009-06-24 20 views
10

में बाहरी सीएसएस और जावास्क्रिप्ट की प्रतिलिपि कैसे करें मेरे पास एक एक्सएसएल रूपांतरण है जो HTML को आउटपुट करता है। head तत्व में मेरे पास एक सीएसएस फ़ाइल संदर्भ है।एक्सएसएलटी

<link rel="stylesheet" type="text/css" href="css/styles.css"/> 

मैं बाहरी संदर्भों के बिना एक स्टैंडअलोन HTML परिणाम बनाना चाहता हूं और इस प्रकार मैं बाहरी सीएसएस संदर्भों को शामिल करना चाहता हूं। कोड डुप्लिकेशन को रोकने के लिए, मैं शैलियों को XSLT टेम्पलेट में हार्ड कोड नहीं करना चाहता, इसलिए मैं सीएसएस फ़ाइल की फ़ाइल सामग्री की प्रतिलिपि बनाने के लिए कुछ XSLT कमांड की तलाश में हूं। मुझे पता है कि xsl:include या xsl:import काम नहीं करेगा, क्योंकि वे एक्सएसएलटी फाइलों की अपेक्षा करते हैं। न तो

<xsl:copy-of select="document('css/styles.css')"/> 

क्योंकि यह कुछ XML अनुपालन की अपेक्षा करता है।

मेरे पास कुछ जावास्क्रिप्ट फ़ंक्शन घोषणाएं भी हैं जिन्हें मैं कॉपी करना चाहता हूं।

क्या यह शुद्ध एक्सएसएलटी के साथ संभव है, या क्या मुझे एक्सएसएलटी फ़ाइल (या HTML फ़ाइल के बाद-प्रोसेसिंग) के कुछ प्री-प्रोसेसिंग करना होगा?

उत्तर

10

एक्सएसएलटी 2.0 एक्सएमएल नहीं होने वाले यूआरएल के माध्यम से दस्तावेजों को पढ़ने के लिए अनपेक्षित-पाठ() फ़ंक्शन प्रदान करता है।

एक्सएसएलटी 1.0 में, यदि आपको सीएसएस के बारे में बहुत अधिक स्क्रिप्ट होने की आवश्यकता नहीं है, तो आप सीएसएस फ़ाइल एक्सएमएल-संगत बनाने के लिए निम्न का उपयोग कर सकते हैं। और, सौभाग्य से, ब्राउज़र HTML टिप्पणियों को सहन करते हैं।

सीएसएस

<!--/*--><root><![CDATA[<!--*/--> 
body 
{ 
    margin: 0; 
} 
div > p 
{ 
    background-color: yellow; 
} 
<!--/*-->]]></root><!--*/--> 

XSLT

<style type="text/css"> 
    <xsl:value-of select="document('test.css')" disable-output-escaping="yes" /> 
</style> 
+3

यह मेरे लिए काम करता है। < > और वर्णों के साथ समस्याएं हैं। मैं <के साथ समाप्त हुआ और ]]> जावास्क्रिप्ट के लिए भी काम करता है। – GrGr

+0

क्या आप अब अपनी एक्सएसएलटी फाइल दिखा सकते हैं? –

0

शायद आप इसे स्टाइलशीट एक्सएमएल सोचने में सोच सकते हैं।

styles.css

/* 
<?xml version="1.0" encoding="utf-8"?> 
<style> 
<![CDATA[ 
*/ 
... styles ... 
/* 
]]> 
</style> 
*/ 

यह एक हैक है, लेकिन अगर वहाँ कोई दूसरा रास्ता यह पर्याप्त हो सकता है (यह मानते हुए यह बिल्कुल काम करता है)।

+1

जो काम नहीं करेगा क्योंकि सीसीएस टेक्स्ट किसी भी मामले में मान्य XML टेक्स्ट मान्य नहीं है। उदाहरण के लिए, "div> p" चयनकर्ताओं, या सभी अनचाहे डबल उद्धरण फ़ॉन्ट घोषणाओं में सोचें। – Tomalak

+0

फिर एक सीडीएटीए अनुभाग जोड़ें। उपयोग दिखाने के लिए अद्यतन उत्तर। – SpliFF

+0

नहीं, यहां तक ​​कि सीडीएटीए के साथ भी। xsltproc टिप्पणी चिह्न पसंद नहीं है। यह कहता है: सीएसएस/शैलियों.css: 1: पार्सर त्रुटि: अपेक्षित टैग शुरू करें, '<' नहीं मिला /* ^ – GrGr

0

उपयोग एक प्रोसेसिंग निर्देश सीएसएस सामग्री रैप करने के लिए:

<?xml version="1.0" encoding="utf-8"?> 
    <root> 
    <?wrapper html 
     <html> 
     <link rel="stylesheet" type="text/css" href="css/styles.css"/> 
     </html> 
    ?> 
    </root> 

तो यह रेंडर करने के लिए मौजूदा xsl:copy-of चयन बयान tweak:

<xsl:copy-of select="document('css/styles.css')//processing-instruction()"/>