2013-06-25 2 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>, если там нет других символов. Например, я бы в конечном итоге с: «Пациент является 56-летний oldCaucasianmale»

<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

А, хорошо знать! Но даже при этом удаляются пробелы между тэгами. Если я заменяю пробелы в XML символами без пробела, эти символы сохраняются. – embden

+0

@embden У вас есть '' в вашей таблице стилей? –

+0

Возможно, вы используете синтаксический анализатор Microsoft XML, который по умолчанию разбивает пробелы. Как только он исчезнет, ​​XSLT ничего не может сделать, чтобы его сохранить. –