2009-03-10 16 views
7

एक्सएसएल ट्रांसफॉर्मेशन को संभालने वाले सर्वर पर नेमस्पेस जांच अक्षम है (क्योंकि जिस व्यक्ति ने एक्सएसएल लिखा था वह नेमस्पेस को समझ नहीं पाया था)। मुझे एक्सएसएल में बदलाव करना है, लेकिन मैं इसका परीक्षण नहीं कर सकता क्योंकि कोई नामस्थान परिभाषित नहीं है यानी।क्या एक्सएसएल रूपांतरण के दौरान नेमस्पेस को अनदेखा करने का कोई तरीका है?

<xsl:template match="ns:element[position()=1]">... 

के बजाय यह

<xsl:template match="element[position()=1]">... 

है तो यह तत्वों के किसी भी एक्सएमएल में क्योंकि सभी वे नामस्थान के साथ सभी योग्य से मेल नहीं खाता।

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

तो मुझे जो करना है वह एक एक्सएसएल रूपांतरण के दौरान नामस्थानों को अनदेखा करने का एक तरीका ढूंढना है। मेरे पास एमएसएक्सएमएल, एक्सएमएलएसपी (यहां एक विकल्प नहीं मिल रहा है) तक पहुंच है और यदि मुझे वास्तव में सी # या इसी तरह की भाषा में कुछ कोड करने की आवश्यकता है।

एक अंतिम उपाय मैं कुछ regexes अप कोड सकते हैं, लेकिन मैं वास्तव में उस मार्ग नीचे जाने के लिए, खासकर जब एक्सएमएल के साथ काम नहीं करना चाहते हैं के रूप में ...

अधिक जानकारी के बारे में एक टिप्पणी के जवाब में:

यह एक विंडोज 2003 वर्चुअल सर्वर है, एक उदाहरण मेथोड सर्वलेट (www.eidosmedia.com) चला रहा है। मुझे नहीं पता कि यह सर्वलेट एक्सएसएल ट्रांसफॉर्मेशन करने के लिए किस तकनीक का उपयोग करता है। वे नेमस्पेस को अनदेखा कर रहे हैं क्योंकि जिस व्यक्ति ने मूल रूप से एक्सएसएल लिखा था उसे समझ में नहीं आया, और उन्हें एक्सएसएल में शामिल नहीं किया। तो अब सभी एक्सएसएल फाइलें (सैकड़ों) में नेमस्पेस नहीं हैं।

इन सभी फ़ाइलों को एक बार में ठीक करना एक दिलचस्प चुनौती हो सकती है, लेकिन मुझे अभी इसकी आवश्यकता नहीं है (और विभागीय प्रबंधक इसमें शामिल परीक्षण की मात्रा के कारण कभी भी इससे सहमत नहीं होगा)। मैं बस इतना जानना चाहता हूं कि कोई उपकरण (या तकनीक) उपलब्ध है जो मुझे इन एक्सएसएल फाइलों को ले जाने की अनुमति देगी और उन्हें नामस्थानों को ध्यान में रखे बिना संबंधित XML दस्तावेज़ को बदलने के लिए उपयोग करेगा। ऐसा लगता है कि एक उपकरण मौजूद होना चाहिए, क्योंकि जिस व्यक्ति ने मूल एक्सएसएल लिखा था, उसने खुद को ट्रांसफॉर्मेशन का परीक्षण करने के लिए कुछ इस्तेमाल किया होगा।

+0

आप सर्वर पर नेमस्पेस जांच कैसे अक्षम करते हैं? मैंने कभी ऐसी बात नहीं सुनी है। –

+0

यह एक तृतीय पक्ष (माइक्रोसॉफ्ट या सूर्य नहीं) उत्पाद है जो परिवर्तनों को संभालता है। उन्होंने डेवलपर्स से सिर्फ उन्हें अक्षम करने का विकल्प देने के लिए कहा। – ilitirit

+0

क्या हमें और जानकारी मिल सकती है? जैसे कि किस प्रकार का सर्वर, इत्यादि। नामस्थानों को अनदेखा करके वे किस समस्या को संबोधित करना चाहते हैं? नामस्थानों को अनदेखा करना बहुत कठिन है, इसलिए यदि हम समस्या के पीछे समस्या को जानते हैं, तो हम इसके बजाय उससे निपटने का प्रयास कर सकते हैं। –

उत्तर

5

आप अपने "असली" परिवर्तन से पहले अपने इनपुट से सभी नामस्थानों को हटाने के लिए एक परिवर्तन कर सकते हैं। लेकिन ... मुझे यकीन नहीं है कि क्या आप करना चाहिए। यह बदसूरत लगता है।

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

    <xsl:template match="*"> 
    <xsl:element name="{local-name()}" > 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="@*"> 
    <xsl:attribute name="{local-name()}"> 
     <xsl:value-of select="." /> 
    </xsl:attribute> 
    </xsl:template> 

</xsl:stylesheet> 

मूल जवाब:

कि एक विकल्प हो सकते हैं?

<xsl:template match="*[local-name()='element' and position()=1]">... 

(के रूप में टिप्पणी से पता चला है - यह नहीं होगा)

+0

नहीं। जैसा कि मैंने एक और टिप्पणी में पोस्ट किया था, मैच सिर्फ एक उदाहरण था। साथ ही "चयन" फ़ंक्शन भी हैं। – ilitirit

+0

इस तथ्य के अलावा कि कुछ काम आवश्यक है ... यह काम क्यों नहीं करना चाहिए? <लागू-टेम्पलेट्स का चयन करें = "/ * [स्थानीय-नाम() = 'foo']/* [स्थानीय-नाम() = 'बार'] /"> – Tomalak

+0

मैं इस कारण के बारे में नहीं सोच सकता कि इसे काम नहीं करना चाहिए , लेकिन आवश्यक काम की मात्रा के कारण मैं नामस्थानों को हटाने/डालने के लिए regexes लिख सकता हूं। मैं बस इतना जानना चाहता हूं कि कोई उपकरण है जो नामस्थानों के बिना परिवर्तन की अनुमति देगा। मैं पहले से ही उन अन्य समाधानों के बारे में जानता हूं जिनके लिए काम की आवश्यकता है। – ilitirit

0

कितने नामस्थान एक्सएमएल में देखते हैं तब्दील किया जा रहा?

यदि 1 क्या आप अस्थायी रूप से उस नामस्थान को अपने एक्सएसएल के डिफ़ॉल्ट नामस्थान के रूप में जोड़ सकते हैं? ठीक है इसका मतलब है कि आपको आउटपुट नेमस्पेस इत्यादि को बदलने की आवश्यकता हो सकती है लेकिन एक बार परीक्षण किया गया है कि आप इन बदलावों को हटा सकते हैं।

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

+0

मैंने कम से कम 10 नामस्थानों की गणना की है (यह एक स्प्रेडशीटएमएल फ़ाइल है)। मैंने पहले से ही एक इनपुट फ़ाइल से नेमस्पेस हटा दिए हैं, लेकिन यह एक अच्छा समाधान नहीं है क्योंकि जब भी मैं एक नई फाइल का परीक्षण करता हूं तो मुझे इसे करना होगा। – ilitirit

+0

ओच। :(मुझे संदेह है कि आपको एक आधुनिक आत्म सम्मानित एक्सएसएल प्रोसेसर मिलेगा जो आपको चाहिए की अनुमति देगा। अफसोस की बात है कि मुझे लगता है कि RegEx स्क्रिप्ट्स आपके स्वयं के सहारा की संभावना है। सर्वर मालिकों के साथ एक कठोर शब्द रखना। – AnthonyWJones

1

मैं इसे एक उत्तर के रूप में पोस्ट कर रहा हूं क्योंकि यह टिप्पणी के रूप में फिट होना बहुत लंबा है।

कोई एक्सएसएलटी प्रोसेसर जिसे मैंने कभी भी सुना है, आपको केवल इनपुट एक्सएमएल में नामस्थानों को वैश्विक रूप से अनदेखा करने की अनुमति देता है। यदि आपके पास एक्सएसएल ट्रांसफॉर्म हैं जो नामस्थानों की अज्ञानता में लिखे गए हैं, और XML दस्तावेज़ जो उनका उपयोग करते हैं, तो आपको या तो परिवर्तन करने के लिए टूटी हुई सर्वलेट का उपयोग करना होगा, या नामस्थानों को हटाने के लिए XML दस्तावेज़ों को पूर्व-प्रक्रिया करना होगा।

ट्रांसफॉर्म टोमालक पोस्ट किया जाएगा - और नियमित अभिव्यक्तियों का उपयोग करने के विपरीत, यह एक्सएमएल में बाकी सब कुछ खराब कर देगा। और ऐसा करने के लिए यह बहुत अधिक काम नहीं है, या तो। चेनिंग ट्रांसफॉर्म बहुत आसान है।

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

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