2009-12-15 7 views
8

ऐतिहासिक कारणों से हम XSL फ़ाइलों के शामिल-पदानुक्रम के अंदर<xsl:output> में xml, html या xhtml: बेहतर विकल्प कौन सा है?

<xsl:output method="xml"> 

और

<xsl:output method="html"> 

और

<xsl:output method="xhtml"> 

का एक मिश्रण है। अब हम रिफैक्टर करना चाहते हैं ताकि सभी एक्सएसएल फाइलें उसी आउटपुट विधि का उपयोग करें।

अंत में हम एक्सएचटीएमएल-आउटपुट का उत्पादन करना चाहते हैं, इसलिए मुझे लगता है कि बाद वाला सबसे अच्छा विकल्प होगा।

लेकिन उन तीन आउटपुट-विधियों के बीच अंतर क्या हैं और आप किस प्रकार के समाधान के लिए उपयोग करेंगे?

संपादित करें: मैं XSLT 2.0

उत्तर

4

मुझे एक्सएसएलटी 2.0 विनिर्देश (XSLT 2.0 and XQuery 1.0 Serialization) पढ़कर जवाब मिला।

एक XHTML तत्व जिनकी सामग्री मॉडल खाली नहीं है के एक खाली उदाहरण को देखते हुए (उदाहरण के लिए, एक खाली शीर्षक या पैरा) serializer कम से कम प्रपत्र उपयोग नहीं करना चाहिए। यही है, यह आउटपुट <p></p> और <p /> नहीं होना चाहिए।

एक XHTML तत्व जिनकी सामग्री मॉडल रिक्त है को देखते हुए, serializer कम से कम टैग वाक्य रचना विकल्प वाक्य रचना <br></br> एक्सएमएल द्वारा अनुमति के रूप में उपयोग करना चाहिए, उदाहरण <br /> के लिए, कई मौजूदा उपयोगकर्ता एजेंटों में अनिश्चित परिणाम देता है।धारावाहिक में पीछे />, उदाहरण से पहले एक स्थान शामिल होना चाहिए <br />, <hr /> और <img src="karen.jpg" alt="Karen" />

serializer इकाई संदर्भ &apos; है, हालांकि एक्सएमएल में कानूनी और इसलिए XHTML में, HTML में परिभाषित नहीं है और सभी HTML उपयोगकर्ता एजेंटों द्वारा मान्यता प्राप्त नहीं है उपयोग नहीं करना चाहिए।

serializer चािहए उत्पादन नाम स्थान एक तरह से घोषणाओं कि है एक्सएचटीएमएल DTD करता है, तो यह संभव है की आवश्यकताओं के अनुरूप। एक्सएचटीएमएल 1.0 डीटीडी को HTML तत्व पर दिखाई देने के लिए घोषणा xmlns = "http://www.w3.org/1999/xhtml" की आवश्यकता होती है, और केवल HTML तत्व पर। serializer MUST उत्पादन नाम स्थान घोषणाओं कि नाम स्थान परिणाम पेड़ में मौजूद नोड्स के साथ संगत कर रहे हैं, लेकिन यह तत्वों जहां DTD उन्हें अमान्य होगा पर अनावश्यक नाम स्थान outputting घोषणाओं से बचना चाहिए।

इसका मतलब है कि उत्तर <xsl:output method="xhtml"> का उपयोग कर रहा है।

+0

यदि आप एक्सएसएलटी 2.0 का उपयोग कर रहे हैं। –

3

उपयोग कर रहा हूँ जहाँ तक मुझे पता है, वहाँ है xslt 1.0 में xsl:output निर्देश के लिए कोई method:xhtml

wc3schools इससे सहमत हैं।

एक्सएचटीएमएल एक एक्सएमएल बोली है, यही वह है जिसका मैं उपयोग करूंगा।

यदि आप xslt 2.0 का उपयोग कर रहे हैं, तो xhtml का उपयोग भी कर सकते हैं, क्योंकि आप यही आउटपुट कर रहे हैं।

+0

एक्सएसएल 2.0 में है। –

+0

तो यह है। फिक्स्ड! – Oded

8

एचटीएमएल एचटीएमएल के रूप में क्रमबद्ध होगा, इसलिए आउटपुट अच्छी तरह से गठित एक्सएमएल नहीं हो सकता है। यदि आप केवल ब्राउज़र पर भेज रहे हैं और एक्सएमएल के रूप में पार्स करने में सक्षम होने की परवाह नहीं करते हैं तो यह आपके लिए काम कर सकता है।

एक्सएमएल एक्सएमएल के रूप में क्रमबद्ध होगा, इसलिए आउटपुट अच्छी तरह से गठित होगा, लेकिन आप आउटपुट का उपयोग कर ब्राउज़र के साथ कुछ मुद्दों में भाग सकते हैं। छोटी चीजें, जैसे स्वयं बंद <script /> और <div /> तत्व। उस मुद्दे से बचने के लिए आपको तत्वों के अंदर टिप्पणियां जोड़ने जैसे गेम (जैसे <script src="someJSFile.js"><!--don't close my script tag --></script>)

यदि आपके पास XSLT 2.0 इंजन है और कुछ तत्वों के बारे में चिंता करने के सिरदर्द के बिना अच्छी तरह से निर्मित HTML आउटपुट चाहते हैं serialized हैं, तो एक्सएचटीएमएल का उपयोग करें।

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