xsl:stylesheet
की exclude-result-prefixes
विशेषता, जब "yes"
जनादेश को हटाने के रूप में निर्दिष्ट
आप पूरी तरह से नामस्थान निकालना चाहते हैं, तो आपको निम्न स्टाइलशीट इस्तेमाल कर सकते हैं लिटरेरल परिणाम तत्व (केवल) के किसी भी नामस्थान नोड्स विरासत में हैं और नामस्थान-यूरी और शाब्दिक परिणाम तत्व के उपसर्ग दोनों को परिभाषित नहीं करते हैं। परिणाम की जड़ टैग पर "विशेषता"
मार्कस Jarderot द्वारा जवाब में निम्नलिखित बयान गलत है:
"foo = को बाहर-परिणाम-उपसर्गों सिर्फ xmlns को हटा"।
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:z="z:z" exclude-result-prefixes="z">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<z:x xmlns:z="z:z">
<z:y/>
</z:x>
</xsl:template>
</xsl:stylesheet>
जब इस बदलाव किसी भी XML दस्तावेज़ (इस्तेमाल नहीं किया) पर लागू किया जाता है, परिणाम है::
<z:x xmlns:z="z:z">
<z:y/>
</z:x>
यहाँ एक जवाबी उदाहरण है हम देखते हैं कि:
नाम स्थान नोड (और परिभाषा) मूल्य के साथ नाम स्थान के लिए (नाम स्थान-uri) "Z: Z" शीर्ष तत्व से नहीं हटाया जाता है (क्या मार्कस Jarderot कॉल "रूट टैग")।
उपसर्ग "z"
के साथ नामस्थान किसी भी शाब्दिक तत्व से हटाया नहीं गया है।
कि साधारण तथ्य यह है कि निर्दिष्ट करने exclude-result-prefixes="yes"
एक नाम स्थान नहीं निकाल सकते कि यह एक LRE (शाब्दिक परिणाम तत्व) पर नहीं है और एक नाम स्थान नोड एक LRE पर है, भले ही लेकिन नाम स्थान को परिभाषित किया गया है पता चलता है, जो करने के लिए तत्व से संबंधित है।
नामस्थान से तत्व को निकालने के लिए यह गैर-एलआरई तत्वों से नामस्थानों से संबंधित है, या नाम हटाएं, हमें कुछ अतिरिक्त प्रोसेसिंग निर्दिष्ट करने की आवश्यकता है।
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()[not(self::*)]">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<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>
ऊपर परिवर्तन किसी भी तत्व को बदल देता है या एक इसी तत्व या विशेषता "कोई नाम स्थान" के अंतर्गत आता है उस के साथ विशेषता:
एक उदाहरण निम्नलिखित के साथ परंपरागत पहचान शासन की प्रतिस्थापन है। इसके लिए एक संभावित उपयोग किसी दस्तावेज़ को डिफ़ॉल्ट नामस्थान के साथ किसी दस्तावेज़ में कनवर्ट करना है।
उदाहरण के लिए, जब निम्न स्रोत XML दस्तावेज़ पर लागू:
<z:x xmlns:z="z:z">
<z:y z:attr="someValue"/>
</z:x>
परिवर्तन का परिणाम है:
<x>
<y attr="someValue"/>
</x>
अंत में एक चेतावनी:
यह ट्रांसफॉर्म आयन हानिकारक हो सकता है यदि दस्तावेज़ों पर लागू होता है जिसमें दो तत्व होते हैं (या दो विशेषताएँ) जिनमें एक ही स्थानीय नाम होता है लेकिन दो अलग-अलग नामस्थानों से संबंधित होता है - परिवर्तन इन तत्वों (या विशेषताओं) के साथ बदलता है जो दोनों एक ही नामस्थान से संबंधित होते हैं (नहीं नाम स्थान)।
XSL 2.0 और नकल तत्वों का उपयोग करते समय या तो '' बहुत उपयोगी कॉपी-namespaces' विशेषता 'या' ', वहाँ भी है का उपयोग कर। तत्व की प्रतिलिपि करते समय नामस्थानों की प्रतिलिपि बनाने के लिए इसे 'नहीं' पर सेट करें। Http://zvon.org/comp/r/ref-XSLT_2.html#Attributes~copy-namespaces पर अधिक जानकारी। –
@ एरिक्क्रेट्लेन्डी, हाँ, यह उपयोगी है। दुर्भाग्यवश, यह एक एक्सएसएलटी 2.0 प्रश्न नहीं है। इस उत्तर का उपयोग किया जा सकता है (दोनों के बीच पोर्टेबल है) दोनों एक्सएसएलटी 1.0 और एक्सएसएलटी 2.0/3.0 –
हां, यह एक्सएसएल 1.0 के लिए नहीं है। मैं इस समस्या में भाग गया और आपका समाधान पाया, लेकिन तकनीकी बाधाओं के कारण, मैंने इसके बारे में एक और तरीका खोजना जारी रखा, और 'कॉपी-नेमस्पेस' विशेषता पाई। पूर्णता के लिए, मैंने भविष्य के साधकों के लिए टिप्पणी जोड़ा। –