2012-10-20 17 views
8

मेरी समस्या यह है कि एक्सएसएलटी का उपयोग करके सभी तत्वों और विशेषताओं के लिए नेमस्पेस और उपसर्ग कैसे जोड़ना है? मेरे इनपुट एक्सएमएल है के रूप में ....एक्सएसएलटी का उपयोग कर सभी तत्वों और विशेषताओं के लिए नेमस्पेस और उपसर्ग कैसे जोड़ें?

<ProcessCreditMemo xmlns='CreditMemo' 
        xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
        xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> 
<ORDER_HEADERDetails> 
    <ORDER_HEADER> 
    <NAME>0010185214</NAME> 

होने के लिए ...

<ns0:ProcessCreditMemo xmlns='CreditMemo' 
         xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
         xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
         xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' 
         xmlns:ns0="http://tempuri.org/"> 
<ns0:ORDER_HEADERDetails> 
    <ns0:ORDER_HEADER> 
    <ns0:NAME>0010185214</NAME> 

मैं जोड़ने उपसर्ग "ns0:" की जरूरत है सभी तत्वों के लिए और गुण, और नाम स्थान "xmlns जोड़ने :। ns0 = "http://tempuri.org/" शीर्षक "ProcessCreditMemo"

मैं एक XSLT का निर्माण करने की यह करने के लिए कोशिश कर रहा हूँ ... में

<xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
<xsl:template match="node()|text()|@*"> 
    <xsl:copy> 
     <xsl:if test="local-name()='ProcessCreditMemo'"> 
      <xsl:attribute name="xmlns" namespace="http://tempuri.org/" /> 
     </xsl:if> 

लेकिन परिणामी एक्सएमएल खाली मूल्य के साथ उपसर्ग को डुप्लिकेट करता है।

<ProcessCreditMemo xmlns="CreditMemo" 
        xmlns:ns0="http://tempuri.org/" 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        ns0:xmlns=""> 

उत्तर

13

यह परिवर्तन:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns0="http://tempuri.org/"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="*"> 
    <xsl:element name="ns0:{name()}" namespace="http://tempuri.org/"> 
    <xsl:copy-of select="namespace::*"/> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

जब पर (सही) लागू किया इनपुट प्रदान की (गंभीर रूप से विकृत, अपूर्ण एक्सएमएल):

<ProcessCreditMemo xmlns='CreditMemo' 
    xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> 
    <ORDER_HEADERDetails> 
    <ORDER_HEADER> 
     <NAME>0010185214</NAME> 
    </ORDER_HEADER> 
    </ORDER_HEADERDetails> 
</ProcessCreditMemo> 

वांछित पैदा करता है, सही परिणाम (गंभीर रूप से विकृत/अधूरा प्रदान नहीं किया गया परिणाम परिणाम):

<ns0:ProcessCreditMemo xmlns:ns0="http://tempuri.org/" xmlns="CreditMemo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <ns0:ORDER_HEADERDetails> 
     <ns0:ORDER_HEADER> 
     <ns0:NAME>0010185214</ns0:NAME> 
     </ns0:ORDER_HEADER> 
    </ns0:ORDER_HEADERDetails> 
</ns0:ProcessCreditMemo> 
+0

मैं अपने xslt में एक ऐसी ही कोड स्निपेट का उपयोग कर रहा है लेकिन मेरे ग्रहण .... के लिए त्रुटि संदेश दिखा अमान्य के रूप में xpath रहता .. हालांकि, एक्सएमएल रूपांतरण पूरी तरह से काम कर रहा है। –

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

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