2009-05-19 12 views
7

मेरे पास एक और XSL फ़ाइल स्थानांतरित करने के लिए एक एक्सएसएल फ़ाइल है। मैं नामस्थान घोषणा को मूल टैग पर होना चाहता हूं, इसके बजाय प्रत्येक तत्व पर दोहराया जा रहा है !!तत्व विशेषता नामस्थान के बजाय XSLT रूट टैग नेमस्पेस

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mynamespace="somenamespace" version="2.0"> 
    <xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes" /> 
    <xsl:template match="myMatchedNode"> 
     <mynamespace:tag>Some text i want inserted into the xsl</mynamespace:tag> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /></xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

वह कुछ इस तरह आउटपुट:

यहाँ मेरी स्टाइलशीट है

.... 

<mynamespace:tag xmlns:mynamespace="somenamespace">Some text i want inserted into the xsl</mynamespace:tag> 

.... 

कैसे मैं परिणाम की जड़ टैग पर नाम स्थान घोषणा के लिए मजबूर हैं ?!

उत्तर

8

आपको अपने परिणाम पेड़ के दस्तावेज़ तत्व पर नामस्थान नोड डालना होगा। ऐसा करने के कई तरीके हैं, इस पर निर्भर करते हुए कि आप एक्सएसएलटी 1.0 या 2.0 का उपयोग कर रहे हैं या नहीं। निम्नलिखित 2.0 समाधान है। मैं (अपने प्रश्न वास्तव में निर्दिष्ट नहीं किया है) यह सोचते कर रहा हूँ कि तुम एक संशोधित पहचान इनपुट दस्तावेज़ पर परिणत कर रहे हैं:

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

    <!-- special rule for the document element --> 
    <xsl:template match="/*"> 
    <xsl:copy> 
     <!-- Add a namespace node --> 
     <xsl:namespace name="mynamespace" select="'somenamespace'"/> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- the identity template --> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- the rest of your rules --> 

</xsl:stylesheet> 

अपने उत्पादन दस्तावेज़ में नामस्थान नियंत्रित करने के लिए सभी विभिन्न तकनीकों की पूरी कवरेज के लिए, मेरी वेबसाइट पर "एक्सएसएलटी में नामस्थान" आलेख के "Not enough namespaces" अनुभाग देखें।

+1

आप महोदय, एक किंवदंती हैं। पागल लिंक! धन्यवाद! – JavaRocky

+0

ओह! और मेरे पास आपकी किताब है। एक्स 2 किंवदंती स्थिति। – JavaRocky

+0

आपके बहुत दयालु शब्दों के लिए धन्यवाद। :-) –

1

शायद मैं सवाल गलत है, लेकिन मुझे लगता है कि आप यह करते हैं चाहिए:

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

<xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes"/> 

<xsl:template match="myMatchedNode"> 
    <tag>Some text i want inserted into the xsl</mynamespace> 

    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

कि आप डिफ़ॉल्ट नाम स्थान और आउटपुट दस्तावेज़ के रूप में अपने नाम स्थान टैग का उपयोग करने के लिए उन्हें के रूप में डिफ़ॉल्ट नाम स्थान के रूप में होगा की अनुमति चाहिए कुंआ। आपका इनपुट दस्तावेज़ अभी भी गंदा mynamespace का उपयोग कर सकता है: टैग वाक्यविन्यास।

आप यह कर भी कोशिश कर सकते:

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

मैं पूरी तरह सुनिश्चित करें कि MyNamespace का स्थान ले लेगा नहीं कर रहा हूँ: सिर्फ हालांकि टैग करें टैग, और अगर यह होता है, यह कार्यान्वयन निर्भर हो सकता है।

+0

नहीं, मुझे की आवश्यकता है क्योंकि डिफ़ॉल्ट नामस्थान कुछ और है। यह एक्सएसएल एक्सएसएलटी पाइपलाइन का हिस्सा है। – JavaRocky

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