2015-08-18 64 views
1

注意:我在OS X Yosemite上使用xsltprocXSLT:在文本元素中,如何用空格替換換行符(<br/>)?

XSLT轉換的源內容是HTML。某些 文本節點包含換行符(< br/>)。在轉換後的 內容(XML文件)中,我希望將換行符轉換爲空格。

例如,我有:

<div class="location">London<br />Hyde Park<br /></div> 

我想要改造這個元素,像這樣:

<xsl:element name="location"> 
    <xsl:variable name="location" select="div[@class='location']"/> 
    <xsl:value-of select="$location"/> 
</xsl:element> 

會發生什麼事是< BR/>被簡單地刪除輸出:

<location>LondonHyde Park</location> 

我確實有其他涉及的模板:

<xsl:template match="node()|script"/> 

<xsl:template match="*"> 
    <xsl:apply-templates/> 
</xsl:template> 

需要什麼樣的XSLT操作的< BR/>的這裏 轉換成一個單一的空間?

回答

0

我會用xsl:apply-templates而不是xsl:value-of並添加一個模板來處理<br/>

您還需要修改<xsl:template match="node()|script"/>,因爲node()也選擇文本節點。如果需要,您可以用替換processing-instruction()|comment(),但它們不會默認輸出。

這裏的一個工作示例:

輸入

<div class="location">London<br />Hyde Park<br /></div> 

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="script"/> 

    <xsl:template match="*"> 
     <xsl:apply-templates/> 
    </xsl:template> 

    <xsl:template match="div[@class='location']"> 
     <location><xsl:apply-templates/></location> 
    </xsl:template> 

    <xsl:template match="br"> 
     <xsl:text> </xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

<location>London Hyde Park </location> 

如果你不想尾隨空格,您既可以...

  • xsl:apply-templates在一個變量($var),並使用normalize-space()xsl:value-of。如:<xsl:value-of select="normalize-space($var)"/>
  • 更新br元素的匹配項。像:br[not(position()=last())]
+0

這幫了很多! –

相關問題