2009-02-03 10 views
7

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

यह सुझाव दिया गया है कि पहले मेरे xpaths को *[local-name()="ElementName"] पर संशोधित करने के लिए सुझाव दिया गया है, हालांकि हम पहले से ही स्टाइलशीट बना चुके हैं, यह बहुत श्रम गहन है।

इसके अलावा, मुझे पता है कि मैं विशेष नामस्थान पर xpath-default-namespace सेट कर सकता हूं, लेकिन जैसा कि पहले उल्लेख किया गया है, मैं इसे आसानी से #all या संभावित नामस्थानों की सूची में सेट नहीं कर सकता। मैं एक और अधिक प्रभावी समाधान की तलाश में हूं और मेरे लिए उपलब्ध सैक्सन प्रोसेसर का विस्तार कार्य है। कोई विचार? धन्यवाद।

उत्तर

3

आप पूर्व प्रसंस्करण पर विचार किया है आपके एक्सएमएल दस्तावेज़?

आप सभी नामस्थानों को हटा सकते हैं (संभावित संघर्षों से अवगत रहें) और फिर मौजूदा एक्सएसएल रूपांतरण का उपयोग करके इसे संसाधित करें।

इस तरह के एक दृष्टिकोण से आपको लाभ होगा कि आपको अपने एक्सएसएलटी को संशोधित करने की आवश्यकता नहीं है। यह पठनीय रहता है (* [स्थानीय-नाम() = 'frob'] बहुत भयानक लग रहा है) और रखरखाव योग्य।

+0

यही वह है जिसे हम नामस्थान समस्या को अस्थायी रूप से कम करने के लिए कर रहे हैं। मैं सहमत हूं * [स्थानीय नाम() सामान बहुत सुरुचिपूर्ण नहीं है। मदद करने के लिए धन्यवाद! –

1

आगे परामर्श के बाद, ऐसा लगता है कि इसमें से कोई आसान तरीका नहीं है। एक्सएसएलटी को नामस्थान अज्ञेयवादी होने के लिए फिर से डिजाइन किया जाना चाहिए, या <xsl:stylesheet> तत्व पर xpath-default-namespace विशेषता का उपयोग करना चाहिए। हम आने वाले दस्तावेज़ के नाम स्थान को संरक्षित करना चाहते, लेकिन अभी भी कई नामस्थान के साथ एक स्टाइलशीट काम है तो हमारे टेम्पलेट्स निम्न प्रपत्र के समान करने की आवश्यकता होगी:

<xsl:template match="*[local-name(.)='ElementName']"> 
    <xsl:element name="{local-name(.)}" xmlns="http://yourURIhere"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template/> 

आदि

1

शायद मैं आपकी समस्या को समझ नहीं पा रहा हूं, लेकिन क्या आपके पास सिर्फ टेम्पलेट नहीं है, नल-नेमस्पेस संस्करण और तत्व के नामित संस्करण दोनों से मेल खाता है? - इस तरह:

<xsl:template match="ElementName | NS:ElementName" xmlns:NS="your-namespace"> 
    ... output ... 
</xsl:template> 

(आमतौर पर एन एस उपसर्ग की घोषणा स्टाइलशीट तत्व पर रखा जाएगा)

यह मेरे लिए अब तक का सबसे 'साफ़' संस्करण के द्वारा होता है - मैं इस का उपयोग कर beeen गए एक ही एक्सएसएलटी स्टाइलशीट प्रक्रिया के लिए सभी तीन आरएसएस प्रारूप (0.91, 1.0 & 2.0)।

+0

यह एक अच्छा समाधान है, हालांकि इसमें अभी भी जटिल टेम्पलेट को फिर से लिखना शामिल है। मदद करने के लिए धन्यवाद! –

+0

समस्या नामस्थान के साथ आउटपुट कर रही है जो पहले – akostadinov

0

मैं अच्छी तरह से समस्या पेश करने के लिए, निम्नलिखित पृष्ठ मिला हालांकि समाधान देने नहीं:

http://www.edankert.com/defaultnamespaces.html

और मैं "संक्षेप में एक्सएमएल" ओ रेली में है कि समस्या का हल मिल गया:

http://docstore.mik.ua/orelly/xml/xmlnut/ch08_10.htm

+1

पर थी, यह प्रश्न समस्या को सही तरीके से प्रस्तुत करता है। उस O'Reilly अध्याय के पास इस समस्या से कोई लेना देना नहीं है। –