2012-02-01 1 views
1
<title> 
<article_title>Land a b c d  Band</article_title> 
</title> 

с помощью следующей функцииУдалить все одиночные символы из строки с помощью xslt1.0

replace(article_title, '(^[^ ]+)(.+\s+)([^ ]+)$', '$1 $3') 

этой строки в преобразовываются в Land бэнд это именно то, что я хочу.

, но проблема в том, что это решение в xslt 1.0, поскольку приложение java, с которым я работаю, может обрабатывать только синтаксический анализ xslt 1.0.

ответ

1

Это XSLT 1.0 Преобразования (есть противный SO ошибка и код не отступ - Прошу прощения за это визуальный беспорядок ...):

<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="text()" name="removeSingles"> 
    <xsl:param name="pText" select="."/> 

    <xsl:variable name="vText" select="normalize-space($pText)"/> 

    <xsl:if test="string-length($vText)"> 
    <xsl:variable name="vLeftChars" select= 
    "substring-before(concat($vText, ' '), ' ')"/> 

    <xsl:if test="string-length($vLeftChars) >1"> 
    <xsl:value-of select="$vLeftChars"/> 
    <xsl:if test= 
     "not(string-length($vLeftChars) 
      >= 
      string-length($vText) 
      ) 
     "> 
     <xsl:text> </xsl:text> 
     </xsl:if> 
    </xsl:if> 

    <xsl:call-template name="removeSingles"> 
    <xsl:with-param name="pText" select= 
    "substring-after($vText, ' ')"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на условии XML документ:

<title> 
<article_title>Land a b c d  Band</article_title> 
</title> 

производит разыскиваемого, правильный результат:

<title> 
    <article_title>Land Band</article_title> 
</title> 
+0

Dimitre, спасибо, похоже, что он должен работать, как я это называю? это правильно sanjay

+0

Не работает :-( – sanjay

+0

@sanjay: Что значит «Не работает». Я всегда проверяю свои ответы перед их публикацией. преобразование на предоставленном XML-документе, и вы должны получить сообщаемый результат. Если нет, то либо вы изменили код XSLT, либо изменили файл XML, либо оба, либо ваш XSLT-процессор неисправен/не полностью совместим. –