2016-07-20 30 views
0

私はこのようになりますXSLTありますXSLテキスト出力 - 空白行と先頭のスペースをトリム

 


    1,2,3 
    4,456,22 

    90,5,some text 


    365,16,soasdkjasdjkasdf 
    9,43,more text 
:出力はこのような何か(CSVファイルになるだろうが)見え

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no" encoding="utf-8" media-type="text/plain" /> 
    <xsl:template match="/SOME/NODE"> 
     <xsl:if test="./BLAH[foo]"> 
<xsl:value-of select="concat(@id, ',' , ./BLAH/bar/@id, ',' , ./blorb/text())"/> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

を主な問題は、私と一致していないノードから空白行(ある

 
1,2,3 
4,456,22 
90,5,some text 
365,16,soasdkjasdjkasdf 
9,43,more text 

:それはに変換されるために、私は必要なもの

ですF条件)とインデント。空白でない行の後に改行を保存しながら、空白行を削除してインデントをトリムする方法はありますか?

私は<xsl:strip-space elements="*"/>を使用して試してみたが、その後、出力は次のようになります。私は、各行の3つの値を持つ必要があるため動作しません

 
1,2,3,4,456,22,90,5,some text,365,16,soasdkjasdjkasdf,9,43,more text 

入力の要求、(重く単純化された)サンプルとして

:私はあなたがそれをこのようにアプローチを示唆している

<SOME> 
    <NODE> 
     <BLAH id="1"> 
      <foo>The Foo</foo> 
      <bar id="2" /> 
      <blorb> some text </blorb> 
     </BLAH> 
    </NODE> 
    <NODE> 
     <BLAH id="3"> 
      <bar id="4" /> 
      <blorb>some text that shouldn't be in output because there's no foo here</blorb> 
     </BLAH> 
    </NODE> 
    <NODE> 
     <BLAH id="5"> 
      <foo>another Foo</foo> 
      <bar id="6" /> 
      <blorb>some other text</blorb> 
     </BLAH> 
    </NODE> 
</SOME> 
+0

私たちの入力を表示してください。私はあなたが ''を使いたいと思っていますが、ソリューションを提案する前に問題を再現する必要があります。 –

+0

@ michael.hor257k:私は 'strip-space'を使ってみました。私はこれを反映するために質問を更新しました。 – FrustratedWithFormsDesigner

+0

要求どおりに入力の例を表示してみませんか? - P.S.リターンが必要な場合は、他の文字と同様に明示的に出力する必要があります。 –

答えて

1

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="utf-8" /> 

<xsl:template match="/SOME"> 
    <xsl:for-each select="NODE/BLAH[foo]"> 
     <xsl:value-of select="@id"/> 
     <xsl:text>,</xsl:text> 
     <xsl:value-of select="bar/@id"/> 
     <xsl:text>,</xsl:text> 
     <xsl:value-of select="blorb"/> 
     <xsl:text>&#10;</xsl:text> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 
+0

'strip-space'で、これは完全に動作します!助けてくれてありがとう! :) – FrustratedWithFormsDesigner

+0

@ FrustratedWithFormsDesigner 'xsl:strip-space'がなくても完全に動作しない理由はありません。 –

+0

@ michael.hor275k:あなたはおそらく正しいですが、そうではありません! Xalanプロセッサに切り替えようとしたとき、同じ結果(空白行と字下げ)があったのですが、「strip-space 'そこにはなかった。 – FrustratedWithFormsDesigner

関連する問題