2009-09-27 15 views
10

को XSL लागू वर्तमान में मैं का उपयोग करें:बाहरी एक्सएमएल

<?xml-stylesheet type="text/xsl" href="XSL.xsl"?> 

एक्सएमएल के लिए XSL लिंक करने के लिए।

यदि मेरा एक्सएमएल यहां था: www.externaldomain.com/rss.xml (मेरे डोमेन के बाहर) मैं एक्सएमएल से एक्सएसएल कैसे जुड़ा सकता हूं?

क्या मैं एक्सएसएल को फाइल या लिंक पर इंगित कर सकता हूं?

उत्तर

2

आप "शुद्ध" एक्सएमएल + xslt (*) से इस लक्ष्य को हासिल नहीं कर सकते। कुछ बाहरी कोड को एक्सएमएल और एक्सएसएलटी की पहचान करने की आवश्यकता होगी जो इसे बदलना चाहिए।

चूंकि आप एक्सएमएल को बदल रहे हैं, इसलिए मुझे लगता है कि आप इसे वेबब्रोसर में कर रहे हैं।

आप demonstrated on w3schools के रूप में जावास्क्रिप्ट का उपयोग करके ऐसा कर सकते हैं। हालांकि, यदि आप जावास्क्रिप्ट-आधारित अनुरोध (यानी AJAX/XHR) कर रहे हैं तो क्रॉस-डोमेन प्रतिबंध अभी भी लागू होते हैं: यदि मूल सर्वर क्रॉस-डोमेन जावास्क्रिप्ट एक्सेस को अनुमति देने के लिए उचित CORS शीर्षलेख सेट नहीं करता है, तो आपको प्रॉक्सी की आवश्यकता होगी आपके स्वयं के सर्वर के माध्यम से एक्सएमएल अनुरोध।

(*): Mad's answer किसी दस्तावेज़ में बाहरी xml को चतुराई से एम्बेड करने के लिए इकाई संदर्भों का उपयोग करता है। यह निश्चित रूप से एक प्रयास के लायक है, लेकिन इस बात से अवगत रहें कि इस तरह की इकाई-आधारित समावेशन का उपयोग कई सूचनाओं-प्रकटीकरण लीक में किया गया है, यही कारण है कि यह अक्सर एक्सएमएल पार्सर में सक्षम नहीं होता है (विशेष रूप से, यह विचलित करने में सक्षम नहीं होना चाहिए एक ब्राउज़र में सीओआरएस)। आपको बस अपनी स्थिति में कोशिश करनी होगी।

+0

यह काम नहीं करेगा, उसने स्पष्ट रूप से एक समाधान के लिए कहा जब एक्सएमएल "मेरे डोमेन के बाहर" है। जावास्क्रिप्ट क्रॉस डोमेन नहीं करता है। उसने आपका जवाब क्यों ऊपर उठाया है, यह मेरे बाहर है क्योंकि यह स्पष्ट रूप से 100% गलत है और मुझे केवल एहसास हुआ कि 20 मिनट खर्च करने के बाद उस उदाहरण को काम करने की कोशिश कर रहा है ... असल में मैं एक समय के बारे में सोच नहीं सकता जब उस उदाहरण का कोई उपयोग होता, यह केवल उन डोमेन पर काम करता है जो एक ही डोमेन पर हैं, जिन्हें पहले ही संपादित किया जा सकता है ... इसलिए मूल रूप से जो मैं कहने की कोशिश कर रहा हूं वह गलत है, और मैंने इसके लिए आपको कम किया है। – Cody

+0

@ कोडी: आपकी निराशा के लिए खेद है, मैं सीओआरएस के लिए आवश्यकता को हाइलाइट करने के लिए उत्तर अपडेट करूंगा। यदि मूल साइट सीओआरएस का समर्थन करती है, तो आप इसे जावास्क्रिप्ट में कर सकते हैं; अन्यथा आपको एक्सएमएल प्रॉक्सी करने की आवश्यकता है। –

+0

@ कोडी: मैं एक कंपनी के लिए ऑपरेटर होता था और हम कुछ प्रक्रियाएं कर रहे थे। यह जानने के लिए कि क्या हम आगे बढ़ सकते हैं, हम एक एक्सएमएल फाइल का उपयोग कर सकते हैं जो एक साझेदार संगठन द्वारा पॉप्युलेट किया गया था, लेकिन हमारे पास इसका कोई उपयोग नहीं था और इसमें कोई सवाल नहीं था कि वे इसमें कुछ भी बदलने के लिए कहें। हम यहां कुछ विशिष्ट सूचनाओं की प्रतीक्षा कर रहे थे और फ़ाइल बहुत लंबी थी। हम केवल उस विशिष्ट टैग की सामग्री प्रदर्शित करना पसंद करेंगे। इसलिए हम इस स्थिति में हैं जहां किसी को बाहरी एक्सएमएल फ़ाइल में एक्सएसएल लागू करने की आवश्यकता है। सम्मान। –

3

यदि आप .NET के अंदर XSLT चलाने की कोशिश कर रहे हैं, तो आप इसे प्राप्त करने के लिए आसानी से XSlCompiledTransform क्लास का उपयोग .NET में कर सकते हैं।

यदि आप इसे चलाने के लिए प्रयास कर रहे हैं उदा। कमांड लाइन, ऐसे टूल का एक समूह है जिसका उपयोग आप किसी एक्सएमएलटी फ़ाइल को किसी दिए गए एक्सएमएल फ़ाइल में लागू करने के लिए कर सकते हैं - आम तौर पर हालांकि, जो आपके स्थानीय हार्डडिस्क पर है।

उदा। देखें info on NXSLT और अन्य अन्य एक्सएसएलटी उपकरण के लिए ओलेग Tkachenko की वेबसाइट, या किसी दिए गए XML फ़ाइल (आपके स्थानीय हार्डडिस्क पर) को XSLT लागू करने के लिए Windows खोल एक्सटेंशन के लिए यह CodeProject article देखें।

उम्मीद है कि यह थोड़ा सा मदद करता है।

मार्क

13

आप एक स्थानीय एक्सएमएल फ़ाइल बना सकते हैं जिसमें रिमोट एक्सएमएल फ़ाइल की एक्सएमएल सामग्री एक इकाई संदर्भ के माध्यम से शामिल है।

नीचे दिया गया उदाहरण आपको रैपर दस्तावेज़ तत्व के अंदर दूरस्थ XML फ़ाइल की सामग्री देगा।

फिर आप अपनी स्थानीय XML फ़ाइल पर स्टाइलशीट प्रोसेसिंग निर्देश शामिल कर सकते हैं। मूल XSL.xsl आयात करने के लिए और लागू-टेम्पलेट्स प्रारंभिक आयात:

हालांकि, बाद से स्थानीय फाइल एक आवरण दस्तावेज़ तत्व है, आप एक "आवरण XSLT" XSL का उपयोग करता है को इंगित करने के लिए आवश्यकता हो सकती रैपर तत्व के अंदर सामग्री के साथ।

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE wrapper [ 
<!ENTITY content SYSTEM "http://stackoverflow.com/feeds"> 
]> 
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?> 
<wrapper> 
    &content; 
</wrapper> 
2

आप आवरण के रूप में एक स्थानीय xml फ़ाइल लिख सकते हैं:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?> 
<wrapper Source="http://www.externaldomain.com/rss.xml"/> 

और अपने स्टाइलशीट का विस्तार इतना है कि यह आवरण को समझता है:

<xsl:template match="wrapper"> 
    <xsl:apply-templates select="document(./@Source)"/> 
</xsl:template> 

मैं XML के साथ यह परीक्षण नहीं किया http पर फ़ाइलें, लेकिन यह स्थानीय एक्सएमएल फाइलों के साथ काम करती है जिन्हें मैं एक XML-स्टाइलशीट प्रोसेसिंग निर्देश शामिल करने के लिए बदलना नहीं चाहता हूं। यह माइक्रोसॉफ्ट फ़ायरफ़ॉक्स, ओपेरा और आईई (7, मैंने अन्य संस्करणों की कोशिश नहीं की है)

0

एक समाधान: बाहरी एक्सएमएल को XMLDocument ऑब्जेक्ट में प्राप्त करें और उसके बाद एक नोड डालें जिसमें xsl का कथन शामिल है। Xsl को http://tipscow.com/how-to-include-xsl-in-xml/ से लिया जा सकता है।