2013-06-25 123 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无法保存它。 –