2015-01-08 4 views
0

Я хочу проверить, существует ли текст между различными узлами.

XML:Проверьте, существует ли текст между различными узлами

<text> 
Line1<newLine></newLine> 
Line2<newLine></newLine> 
Line3<newLine></newLine><newLine></newLine> 
Line4<newLine></newLine><newLine></newLine> 
Line5<newLine></newLine><newLine></newLine><newLine></newLine> 
Line6<newLine></newLine> 
Line7<newLine></newLine><newLine></newLine><newLine></newLine><newLine></newLine> 
</text> 

Мой текущий XSLT заключается в следующем:

<xsl:template match="newLine"> 
<br></br> 
</xsl:template> 

Мой выходной ток следующий (Игнорировать в конце.):

Line1 
Line2 
Line3 

Line4 

Line5 


Line6 
Line7 



. 

I хочу принять newLine в качестве тега, и я хочу, чтобы он перевел его на br, но я НЕ ДОЛЖЕН ant сделать это, когда есть более двух раз <newLine></newLine>. Поэтому я хочу принять пустое правило, но не более одного. Кроме того, я также НЕ хочу иметь одно или несколько пустых правил в конце вывода. Поэтому после Line7 ничего не может произойти.

Edit:
Чтобы сделать его немного более ясно: Если есть <newLine></newLine><newLine></newLine><newLine></newLine>, или даже больше из них, я хочу, чтобы иметь максимум 2 <br/> элементов

Как мне это сделать?

+0

Так как же вы хотите, чтобы преобразовать '', в ничто вообще, или в один '' элемент
? –

+0

@MartinHonnen Если есть '', или даже больше из них, я хочу, чтобы иметь максимум 2 ''
элементов – Grafit

ответ

1

Если мы ограничим матч на

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="newLine[following-sibling::node()[1][normalize-space()]] | 
        newLine[following-sibling::node()[1][self::newLine[following-sibling::node()[1][normalize-space()]]]]"> 
    <br/> 
</xsl:template> 

</xsl:stylesheet> 

то для ввода

<text> 
Line1<newLine></newLine> 
Line2<newLine></newLine> 
Line3<newLine></newLine><newLine></newLine> 
Line4<newLine></newLine><newLine></newLine> 
Line5<newLine></newLine><newLine></newLine><newLine></newLine> 
Line6<newLine></newLine> 
Line7<newLine></newLine><newLine></newLine><newLine></newLine><newLine></newLine> 
</text> 

результат

Line1<br/> 
Line2<br/> 
Line3<br/><br/> 
Line4<br/><br/> 
Line5<br/><br/> 
Line6<br/> 
Line7 
0

Try:

XSLT 1.0

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

<xsl:template match="text"> 
    <xsl:apply-templates select="text()"/> 
</xsl:template> 

<xsl:template match="text()"> 
    <xsl:copy-of select="."/> 
    <xsl:if test="following-sibling::text()"> 
     <xsl:apply-templates select="following-sibling::newLine[1]"/> 
    </xsl:if> 
</xsl:template> 

<xsl:template match="newLine" > 
    <br/> 
    <xsl:if test="following-sibling::node()[1][self::newLine]"> 
     <br/> 
    </xsl:if> 
</xsl:template> 

</xsl:stylesheet> 
Смежные вопросы