簡體   English   中英

XSLT在每個文本節點上應用模板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM