[英]XSLT apply template on every text node
我有從一種xml格式到另一種xml格式的復雜轉換,並且需要在轉換后修剪每個文本元素上所有可能的前導和尾隨空格。
XML輸入類似於:
<Records>
<Record>
<FirstName>FIRST</FirstName>
<MiddleName>MID</MiddleName>
<LastName>LAST</LastName>
<VehType>PCAR</VehType>
<VehType2>VN</VehType2>
<VehMake>CHEV</VehMake>
<VehModel>AST</VehModel>
<VehColor>DBL</VehColor>
<VehVIN>1234123</VehVIN>
</Record>
</Records>
樣式表示例為:
<xsl:template match="Record">
<MyRecord>
<NameRecord>
<FirstName>
<xsl:value-of select="FirstName" />
</FirstName>
<MiddleName>
<xsl:value-of select="MiddleName" />
</MiddleName>
<LastName>
<xsl:value-of select="LastName" />
</LastName>
</NameRecord>
<VehicleRecord>
<VehicleType>
<xsl:value-of select="VehType" />
</VehicleType>
<MakeOfCar>
<xsl:value-of select="VehMake" />
</MakeOfCar>
<ModelOfCar>
<xsl:value-of select="VehModel" />
</ModelOfCar>
<ColorPrimary>
<xsl:value-of select="VehColor" />
</ColorPrimary>
<VehicleIDNumber>
<xsl:value-of select="VehVIN" />
</VehicleIDNumber>
<YearOfCar>
<xsl:value-of select="VehYear" />
</YearOfCar>
</VehicleRecord>
</MyRecord>
</xsl:template>
但是更為復雜,其中包含許多級別和包含項。 問題是,任何傳入的xml元素都可能包含<VehVIN> 1234123 </VehVIN>
,我需要修剪前導和尾隨空格。 找到了這個漂亮的解決方案,並試圖將其集成到我的樣式表中,但是沒有運氣。
<xsl:template match="text()">
<xsl:call-template name="string-trim">
<xsl:with-param name="string" select="." />
</xsl:call-template>
</xsl:template>
而不是這樣做...
<xsl:value-of select="FirstName" />
這樣做,因為這將允許您的text()模板匹配
<xsl:apply-templates select="FirstName/text()" />
其他元素也是如此。
實際上,您只能對<xsl:apply-templates select="FirstName" />
因為XSLT的內置模板將與FirstName
匹配, FirstName
會跳過該節點並選擇其子節點。
您可以使用以下模板:
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)" />
</xsl:template>
它將刪除每個文本元素上的所有前導和尾隨空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.