2013-05-14 94 views
2

我具有如所示的AA的用例以駝峯元素轉換的XML文檔在NewCase:XSLT2.0第一個字母大寫

電流:

<firstName>John</firstName> 
<lastName>Smith</lastName> 
<userId>5692</userId> 

期望:

<FirstName>John</FirstName> 
<LastName>Smith</LastName> 
<UserId>5692</UserId> 

我必須通過XSLT來實現這一點。爲了做到這一點,我發現了正則表達式將捕獲駝峯對我的要求:

\b([a-z])([a-z]*[A-Z][a-z]*)\b 

從那裏,我一直在試圖通過替換功能通過XSLT2.0做到這一點:

replace($xmlToParse,"\b([a-z])([a-z]*[A-Z][a-z]*)\b","REPLACED") 

對於最後的塊,我想採取匹配正則表達式的第一部分(在lowerCase中,段將基於上述正則表達式爲'l'和'owercase'),並使用大寫函數來改變第一段/字母大寫(所以lowerCase將是LowerCase),併爲XML中的每個正則表達式匹配執行此操作。不幸的是,迄今爲止我一直無法實現它。

任何人都可以提供任何有關如何將它們連接在一起的見解嗎?

+0

幾乎到了那裏使用XPath - 取代(/, 「([AZ])([AZ] * [AZ] [AZ] *)」, 「$ 1」) 要重新打開它作爲一個XPath題。 – user2383177

回答

1

該轉化

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

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

<xsl:template match= 
"*[matches(name(), '[a-z]+[A-Z][a-z]*')]"> 
    <xsl:element name= 
    "{upper-case(substring(name(),1,1))}{substring(name(),2)}"> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML片段施加(包裹成一個單一的頂部元件成爲一個良好的XML文檔):

<t> 
    <firstName>John</firstName> 
    <lastName>Smith</lastName> 
    <userId>5692</userId> 
</t> 

產生想要的,正確的結果:

<t> 
     <FirstName>John</FirstName> 
     <LastName>Smith</LastName> 
     <UserId>5692</UserId> 
</t> 
+0

工程就像一個魅力!不勝感激。 – user2383177

相關問題