ठीक है, मैंने इस प्रश्न पर कई भिन्नताएं देखी हैं, लेकिन कोई भी वास्तव में उत्तर देने की कोशिश नहीं कर रहा है और शायद मैं ' मैं यह देखने के लिए बहुत घना हूं कि मैं जो कुछ करने की कोशिश कर रहा हूं उसके दूसरे उत्तरों में से एक को कैसे लागू किया जाए।एक्सएमएलटी द्वारा एक्सएमएलटी = "" एक्सएमएलटी द्वारा उत्पादित प्रविष्टियों को कैसे हटाया जाए, एक एक्सएमएल दस्तावेज़ को दूसरे एक्सएमएल दस्तावेज़
<?xml version="1.0" encoding="utf-8"?>
<message>
<cmd id="api_info">
<api-version>1.0</api-version>
<api-build>1.0.0.0</api-build>
</cmd>
</message>
अब मैं एक XSLT बदलना है कि मैं इस एक्सएमएल के लिए आवेदन कर रहा हूँ है:
मैं कुछ एक्सएमएल कि निम्न तरह दिखता है। XSLT निम्नलिखित के समान है:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
version="2.0">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="message"/>
</xsl:template>
<xsl:template match="message">
<xsl:element name="message" xmlns="http://www.companyname.com/schemas/product/Version001">
<xsl:apply-templates select="/message/cmd/@id"/>
</xsl:element>
</xsl:template>
<xsl:template match="/message/cmd/@id">
<xsl:variable name="_commandType" select="/message/cmd/@id"/>
<xsl:element name="messageHeader">
<xsl:element name="cmdType">
<xsl:value-of select="$_commandType"/>
</xsl:element>
</xsl:element>
<xsl:element name="messageBody">
<xsl:choose>
<xsl:when test="$_commandType = 'api_info'">
<xsl:element name="apiInfoBody">
<xsl:element name="apiVersion">
<xsl:value-of select="/message/cmd/api-version"/>
</xsl:element>
<xsl:element name="apiBuild">
<xsl:value-of select="/message/cmd/api-build"/>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:when test="$_commandType = 'communicationError'">
<xsl:element name="communicationErrorBody">
<xsl:element name="errorCode">
<xsl:value-of select="error-code"/>
</xsl:element>
<xsl:element name="badCmd">
<xsl:value-of select="bad-cmd"/>
</xsl:element>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
उत्पादन मैं मूल रूप से है मैं क्या चाहते हैं और की तरह लग रहा है:
<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="http://www.companyname.com/schemas/product/Version001">
<messageHeader xmlns="">
<cmdType>api_info</cmdType>
</messageHeader>
<messageBody xmlns="">
<apiInfoBody>
<apiVersion>1.0</apiVersion>
<apiBuild>1.0.0.0</apiBuild>
</apiInfoBody>
</messageBody>
</message>
लेकिन क्या मैं नहीं करना चाहती xmlns हैं = " "< messageHeader में विशेषताओं > और <messageBody> तत्वों।
अब मुझे पता चला है कि अगर मैं स्पष्ट रूप से उन तत्वों के लिए एक्सएसएलटी में नामस्थान निर्दिष्ट करता हूं, तो अवांछित विशेषता उन गुणों के बच्चों को एक स्तर से नीचे धकेल देती है।
मैं सिर्फ अपने पूरे XSLT के माध्यम से जाने के लिए और स्पष्ट रूप से मेरी XSL से प्रत्येक के लिए xmlns = "" http://www.companyname.com/schemas/product/Version001 "जोड़ने विशेषता सकता है:। परिभाषाओं तत्व है, लेकिन मुझे पता है कि वहाँ एक और अधिक सुरुचिपूर्ण तरीका होना चाहिए हम प्रोग्रामर इस तरह के बकवास के लिए शॉर्टकट नहीं होने के लिए बहुत आलसी हैं। अगर मेरे एक्सएसएलटी में संक्षिप्त उदाहरण के रूप में कुछ आसान नहीं था, तो मैं इसे इस तरह से करने का लुत्फ उठाता हूं। लेकिन मुझे पता है कि एक बेहतर तरीका होना चाहिए।
क्या किसी को पता है कि मैं यहाँ क्या याद कर रहा हूँ?
धन्यवाद,
+०१२३५१६४१०६१AlarmTripper
आउटपुट एक्सएमएल को नहीं बदला। – AlarmTripper
आप किस एक्सएसएलटी प्रोसेसर का उपयोग कर रहे हैं? –
हां, मैंने पुष्टि की है कि आपका नया सुझाव भी काम करता है और संभवतः मेरे से बेहतर समाधान है क्योंकि यह स्टाइलशीट तत्व में xmlns असाइनमेंट रखता है। और #default विकल्प मुझे अन्य सभी नामस्थान उपसर्गों को बाहर करने से रोकता है। बहुत बहुत धन्यवाद। मुझे इस एक्सएसएलटी सामान के बारे में जानने के लिए बहुत कुछ मिला है और मुझे लगता है कि नामस्थान शायद इसके सबसे कठिन पहलुओं में से एक हैं। – AlarmTripper