2015-01-08 32 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如下:

​​

我的當前輸出是下面的(忽略在最後):

Line1 
Line2 
Line3 

Line4 

Line5 


Line6 
Line7 



. 

我想要接受newLine作爲標籤,並且我希望它將其轉換爲br,但我不要螞蟻做到這一點的時候有兩次以上​​3210。所以我想接受一個空的規則,但不能超過一個。 除此之外,我也不希望在輸出結尾有一個或多個空規則。所以在Line7之後,什麼都不會發生。

編輯:
爲了讓更多一點明確:如果有<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

嘗試:

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> 
相關問題