2008-08-26 18 views
13

मैं एक XML दस्तावेज़ को बदलना चाहता हूं। स्रोत XML इस तरह दिखता है:गतिशील तत्व नाम

<ElementList> 
    <NewTag2007/> 
    <NewTag2006/> 
    <NewTag2005/> 
</ElementList> 

कोड की निम्न पंक्ति काम नहीं कर रहा:

<xsl:element name="{concat('NewTag',Element/Year)}"/> 

उत्पादन एक श्रृंखला है

<svc:ElementList> 
    <svc:Element> 
     <Year>2007</Year> 
    </svc:Element> 
    <svc:Element> 
     <Year>2006</Year> 
    </svc:Element> 
    <svc:Element> 
     <Year>2005</Year> 
    </svc:Element> 
</svc:ElementList> 

मैं चालू करने के लिए है कि में चाहते हैं इस तरह के तत्वों का: < न्यूटाग>। या तो काम नहीं करते:"./Element/Year", और "तत्व/वर्ष // एसवीसी" (रिक्त स्थान के बिना ...)

"// तत्व/वर्ष",। एक जटिलता यह है कि "एलिमेंट" टैग "svc" नामस्थान में है जबकि "वर्ष" टैग डिफ़ॉल्ट नामस्थान में है।

तो वैसे भी, क्या मुझे नामस्थान समस्या का सामना करना पड़ रहा है या क्या मैं "concat()" फ़ंक्शन का गलत उपयोग कर रहा हूं?

+0

खुशी है कि समाधान काम करता है। लेकिन आम तौर पर मैं फ्लाई पर रनटाइम के दौरान टैग नाम नहीं बनाने की सिफारिश करता हूं (हालांकि यह काम करता है!)। मैं xml टैग संरचना को एक और स्थिर तरीके से समझता हूं। मेरा समाधान होगा: इस तरह की विशेषता के साथ जैसे एक स्थिर XML टैग लें। आप अभी भी "तत्व [वर्ष =" 2007 "] के साथ एक्सएसएलटी और एक्सपीएथ के साथ इसका उपयोग कर सकते हैं। इसलिए आप न तो लचीलापन खो देते हैं, लेकिन सुरक्षा और स्थिरता प्राप्त करते हैं ... बस एक थूघ। – Sauer

उत्तर

12

संभवतः नामस्थान मुद्दों और वर्तमान संदर्भ के साथ शायद एक। स्रोत के लिए

<svc:ElementList xmlns:svc="svc"> 
    <svc:Element> 
    <Year>2007</Year> 
    </svc:Element> 
    <svc:Element> 
    <Year>2006</Year> 
    </svc:Element> 
    <svc:Element> 
    <Year>2005</Year> 
    </svc:Element> 
</svc:ElementList> 

स्टाइलशीट

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:svc="svc" 
       version="1.0"> 
    <xsl:template match="svc:ElementList"> 
    <xsl:element name="{local-name()}"> 
     <xsl:for-each select="svc:Element"> 
     <xsl:element name="{concat('NewTag', Year)}"/> 
     </xsl:for-each> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

आप उत्पादन की जरूरत है दे देंगे (जोड़ा नाम स्थान घोषणा के साथ यह अच्छी तरह से गठित XML बनाने के लिए)। ध्यान दें कि svc:Element को नेमस्पेस उपसर्ग का उपयोग करके चुना जाना चाहिए और नए टैग उत्पन्न करते समय संदर्भ svc:Element है, svc:ElementList नहीं।

+0

एफवाईआई, यदि आपको कॉन्सट में पैराम्स का संदर्भ देने की आवश्यकता है, '{concat {'a', $ myParam, 'c')}' का उपयोग करें – raffian

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

  • कोई संबंधित समस्या नहीं^_^