2008-11-27 18 views
14

Böyle bir şey var:Tüm linebreaks'ları nasıl kaldırırım?

<node TEXT=" txt A "/> 
<node TEXT=" 

     txt X 

"/> 
<node> 
    <html> 
     <p> 
     txt Y 
     </p> 
    </html> 
</node> 
<node TEXT="txt B"/> 

ve ben bu almak için XSLT kullanmak istiyorum:

txt A 
txt X 
txt Y 
txt B 

tüm yararsız beyaz boşlukları ve @ METİN adlı ve CDATA en hakkındaki linebreaks şerit istiyorum. Çıktıya yapı sağlayan tek XML girişi <node> -tags.

cevap

18

şu dönüşümü: Bir
012 txt

: bu XML belgesinin

 
<t> 
    <node TEXT=" txt A "/> 
    <node TEXT="  txt X"/> 
    <node> 
     <html> 
      <p>  txt Y  </p> 
     </html> 
    </node> 
    <node TEXT="txt B"/> 
</t>

karşı uygulanan

 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
<xsl:template match="*"> 
    <xsl:apply-templates select="@TEXT | node()"/> 
</xsl:template> 

<xsl:template match="node/@TEXT | text()"> 
    <xsl:if test="normalize-space(.)"> 
    <xsl:value-of select= 
    "concat(normalize-space(.), '&#xA;')"/> 
    </xsl:if> 

    <xsl:apply-templates /> 
</xsl:template> 
 
</xsl:stylesheet> 

istenilen sonuç üretirtxt X
txt Y
txt B

başındaki ve sonundaki boşluk kapalı şeritler ve sadece bir alana sahip diğer boşlukların her sekansı yerine standart XPath fonksiyonu normalize-space() kullanımını dikkat etmeyin.

1

Muhtemelen

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

here açıkladı istiyorum. Ve bu article çok daha fazla detay var.

+0

yönergesi sadece * sadece boşluk için * * text * düğümleri için çalışır ve kesinlikle nitelikler için kullanılamaz. Bu nedenle bu cevap doğru değil. –