2010-04-20 9 views
10

मैं इस तरह एक xml है:मैं एक्सएसएलटी का उपयोग करके एक विशेषता का नाम कैसे बदलूं?

<person name="foo" gender = "male" /> 

मैं इसे

<person id="foo" gender="male" /> 

को बदलना चाहते हैं वहाँ XSLT का उपयोग कर ऐसा करने के लिए कोई तरीका है?

  • मुझे लगता है मैं व्यक्तिगत रूप से अधिक विशेषताओं होगा व्यक्ति

  • में बच्चे नोड्स का एक बहुत होगा।

+0

यह मेरे लिए एक विशेषता का नाम बदलने जैसा दिखता है, जब तक कि आपके वास्तविक परिदृश्य में अधिक न हो जो प्रश्न में नहीं आया। –

उत्तर

13

के साथ यह बहुत सरल है: परिणत पहचान का उपयोग करें और एक बनाने टेम्पलेट कि name विशेषता बदल देती है:

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

<xsl:template match="@name"> 
    <xsl:attribute name="id"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
</xsl:template> 

यह name गुण इसी रूप में काम के अलावा दस्तावेज में सब कुछ छोड़ देंगे। यदि आप केवल तत्वों पर name विशेषता को बदलना चाहते हैं, तो टेम्पलेट के match विशेषता में अधिक प्रतिबंधित XPath डालें, उदा। person/@name

+0

लघु, साफ, सरल। उत्कृष्ट जवाब – markusk

+0

खूबसूरती से काम किया। – unj2

-1

यह करना चाहिए, की काफी यकीन नहीं {नाम()} लेकिन आप उस जगह ले सकता है "व्यक्ति"

> <xsl:template match="person"> 
>  <xsl:element name="{name()}"> 
>   <xsl:attribute name="id"> 
>   <xsl:value-of select="@name"/> 
>   </xsl:attribute> 
>   <xsl:attribute name="gender"> 
>   <xsl:value-of select="@gender"/> 
>   </xsl:attribute> 
>  </xsl:element> 
>  </xsl:template> 
+0

क्या मुझे अपनी हर विशेषता के लिए एक विशेषता बनाने की आवश्यकता है? क्या मैं आईडी को छोड़कर सभी विशेषताओं की प्रतिलिपि बना सकता हूं? – unj2

+0

यह एक तत्व बनाने के लिए 'xsl: element', एक विशेषता मान टेम्पलेट, और' नाम() 'फ़ंक्शन का उपयोग करने के लिए पागल है जिसका नाम आप पहले ही जानते हैं। '' ' 'के साथ बदलें और आप AVTs के साथ' xsl: विशेषता' तत्वों को भी प्रतिस्थापित कर सकते हैं। वह सब करो और उत्तर अभी भी सही नहीं होगा (कुंजान के प्रश्न का उत्तर "नहीं, जब तक कि आप इसे ऐसा न करें"), लेकिन यह कम गलत होगा। –

+0

बस एक सामान्य समाधान प्रदान करने का प्रयास जो नाम के बावजूद किसी भी तत्व के लिए काम करेगा। यदि यह केवल तत्व के लिए होगा, तो निश्चित रूप से सरल हार्ड-कोडेड समाधान बेहतर होगा। – derek

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