xslt

2010-09-06 16 views
20

नीचे का उपयोग कर एक्सएमएल के बीच में तत्व जोड़ना वास्तविक एक्सएमएल है:xslt

<?xml version="1.0" encoding="utf-8"?> 
<employee> 
<Name>ABC</Name> 
<Dept>CS</Dept> 
<Designation>sse</Designation> 
</employee> 

और मुझे नीचे के रूप में उत्पादन हैं:

<?xml version="1.0" encoding="utf-8"?> 
<employee> 
<Name>ABC</Name> 
    <Age>34</Age> 
<Dept>CS</Dept> 
    <Domain>Insurance</Domain> 
<Designation>sse</Designation> 
</employee> 

xslt का उपयोग कर के बीच में XML तत्व जोड़ने के लिए इस संभव है ? कृपया मुझे नमूना दें!

उत्तर

32

यहाँ एक XSLT 1.0 स्टाइलशीट है कि तुम क्या पूछा क्या करेंगे है:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <!-- Identity transform --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Name"> 
     <xsl:copy-of select="."/> 
     <Age>34</Age> 
    </xsl:template> 

    <xsl:template match="Dept"> 
     <xsl:copy-of select="."/> 
     <Domain>Insurance</Domain> 
    </xsl:template> 
</xsl:stylesheet> 

जाहिर तर्क आप से नए डेटा जहां हो रही होगी पर निर्भर करती है, और जहां यह जाने की जरूरत है। उपर्युक्त स्टाइलशीट प्रत्येक <Name> तत्व के बाद <Age> तत्व, और प्रत्येक <Dept> तत्व के बाद <Domain> तत्व के बाद केवल <Age> तत्व डालता है।

(सीमा:। यदि आपके दस्तावेज़ अन्य <Name> या <Dept> तत्वों के भीतर <Name> या <Dept> तत्वों हो सकता था, केवल सबसे बाहरी लोगों को इस विशेष प्रसंस्करण होगा मुझे नहीं लगता कि अपने दस्तावेज़ पुनरावर्ती संरचना इस तरह की है करने के लिए के लिए आप चाहते हैं , इसलिए यह आपको प्रभावित नहीं करेगा, लेकिन मामले में उल्लेख करने लायक है।)

+0

क्या होगा यदि आप केवल चाहते तत्व एक बार जोड़े जाने के लिए, बजाय एक बार के हर नाम/विभाग तत्वों के लिए? – Joe

+1

@ जो: वाह, लगभग 5 साल बाद। :-) उस स्थिति में आप एक टेम्पलेट में परिणाम तत्व जोड़ते हैं जो केवल एक बार मेल खाता है। जैसे 'मैच ="/*/नाम [1] "'। – LarsH

+1

बढ़िया, मुझे वास्तव में 5 साल बाद उत्तर की उम्मीद नहीं थी, बहुत कम एक संकेत! इससे बहुत मदद मिलती है – Joe

2

मैंने मौजूदा स्टाइलशीट में कुछ चीजों को संशोधित किया है, यह आपको विशिष्ट तत्व चुनने और आपके एक्सएमएल में अपडेट करने की अनुमति देगा।

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <!-- Identity transform --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Name[1]"> 
     <xsl:copy-of select="."/> 
     <Age>34</Age> 
    </xsl:template> 

    <xsl:template match="Dept[1]"> 
     <xsl:copy-of select="."/> 
     <Domain>Insurance</Domain> 
    </xsl:template> 
</xsl:stylesheet> 

एक्सएमएल:

<?xml version="1.0" encoding="utf-8"?> 
<employee> 
<Name>ABC</Name> 
<Dept>CS</Dept> 
<Designation>sse</Designation> 
<Name>CDE</Name> 
<Dept>CSE</Dept> 
<Designation>sses</Designation> 
</employee>