2013-06-25 121 views
2

使用XSLT,我試圖去除特定節點內的所有標籤,同時保留這些標籤之間的空白。XSLT:剝離標籤,保留空格

我給出這樣的XML:

<text> 
<s id="s2"> The patient is a <p id="p22">56-year-old</p> <p id="p28">Caucasian</p> <p id="p30">male</p></s></text> 

我想去掉所有的<小號>和< P的>標籤,這樣我只是有<文本>內的英語句子節點。

我試過了下面的模板,它成功地刪除了所有的標籤,但是如果沒有其他字符,它也會刪除<p>標籤之間的空格。例如,我最終會說:「患者是一位56歲的高級女警」

<xsl:template name="strip-tags"> 
    <xsl:param name="text"/> 
    <xsl:choose> 
     <xsl:when test="contains($text, '&lt;')"> 
      <xsl:value-of select="substring-before($text, '&lt;')"/> 
      <xsl:call-template name="strip-tags"> 
       <xsl:with-param name="text" select="substring-after($text, '&gt;')"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

有什麼想法?謝謝!

回答

1

保留空白但刪除了標記的文本內容正好是元素節點的「字符串值」的定義。所以,你可以簡單地使用

<xsl:value-of select="$text" /> 

(假設$text包含<text>元素節點)。這也假定您

<xsl:strip-space elements="*"/> 
在樣式表

,因爲這會剝奪各種對</p> <p>標籤之間的唯一空白文本節點。

+0

啊,很高興知道!但即使這樣做,p標籤之間的空白也會被刪除。如果我用非空格字符替換XML中的空格,則會保留這些字符。 – embden

+0

@embden你的樣式表中是否有'? –

+0

您可能正在使用Microsoft XML解析器,該解析器默認情況下剝奪了空白。一旦消失,XSLT無法保存它。 –