2012-03-16 3 views
3

Я хочу выделить пробелы в значениях элемента.как удалить лишние пробелы значений элементов в xslt

Источник:

<sss> 
     HI: 
     HELLO: 
     HOW: 
    </sss> 

Выход:

<sss>HI:HELLO:HOW 

Я попробовал этот

<xsl:strip-space elements="*"/> 

, но это не влияет на производительность.

+0

Как выглядит ваш текущий XSLT? – FloppyDisk

ответ

4

Если вы хотите лишить символ или более, используйте перевод, введя символ (символы) в качестве второго аргумента, а пустую строку - в качестве третьего translate(., ' ', ''), например.

<xsl:template match="sss"> 
    <xsl:copy> 
    <xsl:value-of select="translate(normalize-space(), ' ', '')"/> 
    </xsl:copy> 
</xsl:template> 
0

Для того, чтобы получить результат со всем белым пространством удалены, используйте стандартную функцию XPath translate():

translate(., ' &#xA;&#xD;&#xC;&#9;', '') 

Это не нужен использовать normalize-space() вообще.

Шаблон нужен для этого пробела элиминации просто это:

<xsl:template match="sss/text()"> 
    <xsl:value-of select="translate(., ' &#xA;&#xD;&#9;', '')"/> 
</xsl:template> 

Полное преобразование включает также правила идентичности, так что, если документ XML содержит Непро- sss элементы, они будут скопированы " as-is ":

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

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="sss/text()"> 
    <xsl:value-of select="translate(., ' &#xA;&#xD;&#xC;&#9;', '')"/> 
</xsl:template> 
</xsl:stylesheet> 
+0

Возможно, стоит отметить, что ссылка на #xC только хорошо сформирована, если вы используете XML 1.1 –

+0

@DavidCarlisle: Хорошее наблюдение - я, должно быть, все еще спал этим утром :) –

Смежные вопросы