मैं क्रोम में XSLT कैसे काम कर सकता हूं?


87

मेरे पास एक XML दस्तावेज़ है जिसे एक संबंधित XSL फ़ाइल के साथ परोसा गया है । जावास्क्रिप्ट के बिना परिवर्तन को क्लाइंट-साइड निष्पादित किया जाना बाकी है।

यह IE (शॉक हॉरर) में ठीक काम करता है, लेकिन Google क्रोम में, बस दस्तावेज़ के पाठ नोड्स को प्रदर्शित करता है।

मुझे पता है कि क्रोम में क्लाइंट-साइड XSL करना संभव है, जैसा कि मैंने इसके उदाहरण देखे हैं, लेकिन मैं अभी तक इस सफलता को दोहराने में सक्षम नहीं हूं

मैं क्या गलत कर रहा हूं?


समाधान पोस्ट करना बहुत अच्छा होगा, जब आप इसे जानते हैं। मैंने वास्तव में किसी भी गंभीर चीज़ के लिए क्रोम का उपयोग नहीं किया है - मेरे लिए एक Google-खिलौना जैसा लगता है। आपको XSLT क्लाइंट-साइड प्रदर्शन करने की आवश्यकता क्यों है?
दिमित्रे नोवत्चेव

मैं नही। मुझे लगा कि यह थोड़े साफ-सुथरे होंगे। और मैं अभी भी जानना चाहता हूं कि क्रोम पर कुछ चीजें क्यों काम करती हैं, लेकिन मेरा नहीं है। ओह, और IE उपयोगकर्ताओं के लिए, पृष्ठ के अत्याचारी इंद्रधनुष स्टाइल के लिए क्षमा करें।
एरिक

12
मेरे लिए Chrome केवल http: // पर XML को खोलने पर रूपांतरण कर सकता है, यह फ़ाइल के माध्यम से काम करने पर काम नहीं करता है: //, xmlns-विशेषता मेरे लिए कोई अंतर नहीं करता है।
जारोस्लाव ज़ारूबा

इस बग का उल्लेख यहां
फ्लावियो सिस्सेन

1
इसके लिए वास्तविक क्रोम बग code.google.com/p/chromium/issues/detail?id=111905 पर है
अनुदान पीटर्स

जवाबों:


116

एरिक द्वारा नीचे दिया गया अन्य उत्तर गलत है। उन्होंने जिन नामों का उल्लेख किया, उनका समस्या से कोई लेना-देना नहीं था।

असली कारण यह काम नहीं करता है सुरक्षा चिंताओं (cf. समस्या 4197 , मुद्दा 111905 ) के कारण है।

इस परिदृश्य की कल्पना करें:

  1. आपको अटैकर के रूप में एक वेब पेज वाले हमलावर से एक ईमेल संदेश मिलता है, जिसे आप डाउनलोड करते हैं।

  2. अब आप अपने ब्राउज़र में स्थानीय वेब पेज खोलें।

  3. स्थानीय वेब पेज बनाता है <iframe>जिसका स्रोत है https://mail.google.com/mail/ है

  4. क्योंकि आप जीमेल में लॉग इन हैं, फ्रेम आपके इनबॉक्स में संदेशों को लोड करता है।

  5. स्थानीय वेब पेज जावास्क्रिप्ट की पहुंच का उपयोग करके फ्रेम की सामग्री को पढ़ता है frames[0].document.documentElement.innerHTML । (एक ऑनलाइन वेब पेज इस कदम को करने में सक्षम नहीं होगा क्योंकि यह गैर-जीमेल मूल से आएगा; वही-मूल नीति पढ़ने में विफल हो जाएगी।)

  6. स्थानीय वेब पेज आपके इनबॉक्स की सामग्री को एक में रखता है <textarea>और डेटा को हमलावर के वेब सर्वर पर एक पोस्ट POST के माध्यम से जमा करता है। अब हमलावर के पास आपका इनबॉक्स है , जो स्पैमिंग या चोरी की पहचान करने के लिए उपयोगी हो सकता है।

Chrome स्थानीय फ़ाइलों पर प्रतिबंध लगाकर उपरोक्त परिदृश्य को विफल करता है का उपयोग करके खोली । इन प्रतिबंधों को दूर करने के लिए, हमें दो समाधान मिले हैं:

  1. के साथ Chrome चलाने का प्रयास करें --allow-file-access-from-files ध्वज के । मैंने इसे स्वयं परीक्षण नहीं किया है, लेकिन यदि यह काम करता है, तो आपका सिस्टम अब ऊपर उल्लिखित प्रकार के परिदृश्यों के लिए भी असुरक्षित होगा।

  2. इसे होस्ट में अपलोड करें, और समस्या हल हो गई है।


2
यह सच है, हालांकि यह समस्या का एकमात्र कारण नहीं था। मैं थोड़ी देर के लिए "बग" रिपोर्ट का पालन ​​कर रहा हूं । हालाँकि, मैं इसे बिना सर्वर-साइड काम करने के लिए नहीं प्राप्त कर सका xmlns। यह क्रोम के नए संस्करणों में बदल सकता है।
एरिक

4
@ एरिक ओके यह आपकी समस्या का जवाब नहीं हो सकता है, लेकिन यह आपके प्रश्न का सही उत्तर है। इस पृष्ठ पर आने वाले आगंतुकों की टिप्पणियों को देखते हुए, हम देख सकते हैं कि जिस उत्तर को चिह्नित किया गया था, वह उनकी समस्याओं को हल नहीं कर रहा है। (अन्यथा उन्हें समाधान खोजने के लिए अन्य 6 उत्तरों के माध्यम से
उकसाना होगा

4
@ स्पेसर: यह मेरे सवाल का सही जवाब नहीं है। मेरा प्रश्न इस बारे में पूछ रहा था कि मेरे सर्वर पर होस्ट किए गए दस्तावेज़ों की एक जोड़ी को सही तरीके से रूपांतरित क्यों नहीं किया गया। सुरक्षा समस्या, जबकि जानने के लायक है, इस विशेष प्रश्न के लिए प्रासंगिक नहीं है।
एरिक

1
@Pacerier धन्यवाद, --allow-file-access-from-filesठीक काम करता है।
इब्न सईद

कैसे इस macOS में सेट करने के लिए?
परदीप जैन

14

लेखन के समय, क्रोम में एक बग था जो xmlnsरेंडरिंग को ट्रिगर करने के लिए एक विशेषता की आवश्यकता थी :

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >

यह वह समस्या थी जो मैं सर्वर से xml फ़ाइल की सेवा करते समय चला रहा था ।


अगर मेरे विपरीत, आप एक file:///url से xml फ़ाइल देख रहे हैं , तो जिन समाधानों का उल्लेख --allow-file-access-from-filesकरना चाहते हैं, वे हैं


2
अच्छा खोजो! इसके लिए एक बग भरा।
मोहम्मद मंसूर

1
@ पेटर: यह आपके इनपुट डॉक्यूमेंट पर निर्भर करता है। XSLT कल्पना यहाँ बहुत स्पष्ट है और IE अभी भी माफ कर रहा है। यदि इनपुट एक्सएचटीएमएल वैध है, तो इसमें नाम स्थान की घोषणा है। XSLT को उस इनपुट दस्तावेज़ में कुछ भी पता लगाने के लिए, आपको नामस्थान को परिभाषित करना होगा। हालाँकि, यह डिफ़ॉल्ट नाम स्थान (लेकिन सबसे आसान) का उपयोग करने के लिए आवश्यक नहीं है।
हाबिल

10
@ एरिक: मेरे जवाब पर एक नज़र डालें, कोई अपराध नहीं, लेकिन आपका जवाब गलत है।
पचेरियर

4
यह जवाब नहीं है (न ही समाधान, और "..." निश्चित रूप से थोड़ा अस्पष्ट है), पेसियर का सही है।
RedGlyph

यह गलत है। आवश्यक नहीं कि मंदी हो। यह संस्करण संख्या के लिए पूछ रहा है।
UDID

6

मुझे लोकलहोस्ट पर भी यही समस्या थी। जवाब की तलाश में इंटरनेट के चारों ओर दौड़ना और मुझे लगता है कि --allow-file-access-from-filesकाम करता है जोड़ने को मंजूरी । मैं मैक पर काम करता हूं, इसलिए मेरे लिए मुझे टर्मिनल के माध्यम से जाना sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-filesऔर अपना पासवर्ड दर्ज करना होगा (यदि आपके पास एक है)।

एक और छोटी बात - कुछ भी काम नहीं करेगा जब तक आप अपने .xml फ़ाइल को अपने .xsl फ़ाइल के संदर्भ में निम्नानुसार जोड़ दें <?xml-stylesheet type="text/xsl" href="<path to file>"?>। एक और छोटी सी बात जिसका मुझे तुरंत एहसास नहीं हुआ - आपको ब्राउज़र में अपना .xml फ़ाइल खोलना चाहिए, कोई .xsl नहीं।


6

Chrome पर आधारित समस्या xml नाम स्थान के बारे में नहीं है जो हैxmlns="http://www.w3.org/1999/xhtml" । Namesspace विशेषता के बिना, यह IE के साथ भी काम नहीं करेगा।

सुरक्षा प्रतिबंध के कारण, आपको --allow-file-access-from-filesक्रोम शुरू करते समय ध्वज जोड़ना होगा । मुझे लगता है कि linux / * nix उपयोगकर्ताओं टर्मिनल के माध्यम से लेकिन खिड़कियां उपयोगकर्ताओं के लिए आसानी से ऐसा कर सकते हैं, तो आप को खोलने के लिए है गुण के क्रोम शॉर्टकट और नीचे के रूप में लक्ष्य गंतव्य में जोड़;

राइट-क्लिक -> गुण -> लक्ष्य

यहाँ छवि विवरण दर्ज करें

यहाँ झंडे के साथ एक नमूना पूर्ण पथ है जो मैं अपनी मशीन पर उपयोग करता हूं;

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

मुझे उम्मीद है कि इस चरण-दर-चरण को दिखाने से विंडोज उपयोगकर्ताओं को समस्या के लिए मदद मिलेगी, यही कारण है कि मैंने इस पोस्ट को जोड़ा है।


4

वैसे यह काम नहीं करता है अगर XML फ़ाइल (मानक PI द्वारा शुरू होती है:

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

XSL स्टाइलशीट को संदर्भित करने के लिए) को "एप्लिकेशन / xml" के रूप में परोसा जाता है। उस स्थिति में, क्रोम अभी भी संदर्भित XSL स्टाइलशीट डाउनलोड करेगा, लेकिन कुछ भी प्रदान नहीं किया जाएगा, क्योंकि यह "दस्तावेज़ / xml" से दस्तावेज़ प्रकारों को "दस्तावेज़" (?) और "पाठ / xsl" में चुपचाप बदल देगा! स्टाइल्सशीट "(??!), और फिर एक्सएमएल दस्तावेज़ को प्रस्तुत करने का प्रयास करेंगे जैसे कि यह एक HTML (5) दस्तावेज़ था, बिना अपने एक्सएसएलटी प्रोसेसर को चलाने के। और स्क्रीन पर कुछ भी प्रदर्शित नहीं किया जाएगा (जिसकी सामग्री पिछले पृष्ठ को दिखाना जारी रखेगी जिसमें से XML पृष्ठ संदर्भित था, और आइकन को स्पिन करना जारी रखेगा, जैसे कि दस्तावेज़ पूरी तरह से लोड नहीं किया गया था।

आप क्रोम कंसोल का पूरी तरह से उपयोग कर सकते हैं, जिससे पता चलता है कि सभी संसाधन लोड हैं, लेकिन उनकी गलत व्याख्या की गई है।

तो हाँ, Chrome वर्तमान में केवल XML फ़ाइलों (इसकी वैकल्पिक अग्रणी XSL स्टाइलशीट घोषणा के साथ) को प्रस्तुत करता है, केवल अगर इसे "टेक्स्ट / xml" के रूप में परोसा जाता है, लेकिन क्लाइंट-साइड प्रदान किए गए XML के लिए "आवेदन / xml" के रूप में नहीं है एक्सएसएल घोषणा।

XML फ़ाइलों के लिए "टेक्स्ट / xml" या "एप्लिकेशन / xml" के रूप में कार्य किया जाता है और जिसमें XSL स्टाइलशीट घोषणा नहीं होती है, क्रोम को अभी भी इसे DOM ट्री के रूप में रेंडर करने के लिए एक डिफ़ॉल्ट स्टाइलशीट का उपयोग करना चाहिए, या कम से कम इसके टेक्स्ट स्रोत के रूप में। लेकिन यह नहीं है, और यहाँ यह फिर से इसे प्रस्तुत करने का प्रयास करता है जैसे कि यह HTML था, और कई स्क्रिप्ट्स पर तुरंत बग (एक डिफ़ॉल्ट आंतरिक एक सहित) जो onLoad घटनाओं से निपटने के लिए "document.body" तक पहुंचने का प्रयास करता है और कुछ जावास्क्रिप्ट इंजेक्ट करता है इसमें हैंडलर।

क्रोम में अपेक्षित (कॉमन लिस्प डॉक्यूमेंटेशन) के रूप में काम न करने वाली साइट का एक उदाहरण IE में काम करता है जो क्लाइंट-साइड एचएसएलएस का समर्थन करता है:

http://common-lisp.net/project/bknr/static/lmman/toc.html

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


3

जैसा कि मैं बता सकता हूं, क्रोम हेडर की तलाश में है

सामग्री-प्रकार: पाठ / xml

फिर यह काम करता है --- अन्य पुनरावृत्तियां विफल रही हैं।

सुनिश्चित करें कि आपका वेब सर्वर यह प्रदान कर रहा है। यह भी बताता है कि यह फ़ाइल के लिए विफल क्यों है: // URI xml फाइलें।


2

Http://www.aranedabienesraices.com.ar की जाँच करें

यह साइट XML / XSLT क्लाइंट-साइड के साथ बनाया गया है। यह IE6-7-8, FF, O, Safari और Chrome पर काम करता है। क्या आप HTTP हेडर सही तरीके से भेज रहे हैं? क्या आप एक ही मूल नीति का सम्मान कर रहे हैं?


मेरा उत्तर देखें , मैंने इसे हल कर दिया है। Chrome को xmlnsविशेषता की आवश्यकता होती है।
एरिक

4
मुझे ऐसा नहीं लगता। रूपांतरण करने के लिए, क्रोम को XHTML नामस्थान पर डिफ़ॉल्ट नामस्थान सेट करने की आवश्यकता नहीं है। XHTML को रेंडर करने के लिए उसे उचित XHTML की ज़रूरत है। आप चीजों को मिला रहे हैं।

ऊपर संदर्भित साइट XML के साथ नहीं बल्कि XHTML के साथ बनाई गई है। दोनों काफी समान नहीं हैं (दोनों एक्सएमएल हैं लेकिन एक HTML भी है और दूसरा नहीं है)।
जर्सीबॉय

1

मैंने wwwroot में फाइल डालने की कोशिश की । इसलिए क्रोम में पेज एक्सेस करते समय, यह पता लोकलहोस्ट / yourpage.xml है


1

एरिक जो कहता है वह सही है।

Xsl में, xsl के लिए: स्टाइलशीट टैग में निम्नलिखित विशेषताएं हैं

संस्करण = "1.0" xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" xmlns = "http://www.w3.org/1999/xhtml"

यह क्रोम में ठीक काम करता है।


1

मैंने इसका परीक्षण शुरू किया और स्थानीय फ़ाइल / Chrome सुरक्षा समस्या में भाग गया। एक बहुत ही सरल वर्कअराउंड एक्सएमएल और एक्सएसएल फाइल को, ड्रॉपबॉक्स पब्लिक फोल्डर में रखा जाता है और दोनों फाइलों के लिंक मिलते हैं। XML सिर में XSL ट्रांसफ़ॉर्म के लिए लिंक डालें। Chrome और IT कार्यों में XML लिंक का उपयोग करें!


1

8 साल बाद स्थिति थोड़ी बदल जाती है।

मैं अन्य मापदंडों के बिना Google Chrome का नया सत्र खोलने में असमर्थ हूं और 'फ़ाइल:' स्कीमा की अनुमति देता हूं।

MacOS मैं पर:

open -n -a "Google Chrome" --args \
    --disable-web-security \               # This disable all CORS and other security checks
    --user-data-dir=$HOME/fakeChromeDir    # This let you to force open a new Google Chrome session

इस तर्क के बिना मैं स्थानीय में XSL स्टाइलशीट का परीक्षण करने में असमर्थ हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.