2016-07-12 23 views
1

私のXMLのテキスト値から余分なスペースを取り除きたい。私はインターネット上で利用可能な様々なオプションを試みたが、それらのどれも私のために働いた。 normalize-space()を使用することはできません。後ろに先行する&文字だけを削除する必要があるためです。XSLTを使用してテキストノードから空白を削除する

XML:

<BillEvent> 
<TransactionInfo> 
    <EventDate> 2016-04-13T05:40:28 </EventDate> 
    </TransactionInfo> 
     <CaseID> Since  this is a CDATA section! </CaseID> 
     <BillGroup> 
       <Bill> 
       <BillNumber>  253545666847</BillNumber> 
       <ToDate> 2016-05-31  </ToDate> 
       <BillActivityCode tc="1"/> 
       <BillCreationDate>  Since this is a CDATA section! </BillCreationDate> 
      </Bill> 
     </BillGroup>  
</BillEvent> 

期待出力:

<BillEvent> 
<TransactionInfo> 
    <EventDate>2016-04-13T05:40:28</EventDate> 
    </TransactionInfo> 
     <CaseID>Since  this is a CDATA section!</CaseID> 
     <BillGroup> 
       <Bill> 
       <BillNumber>253545666847</BillNumber> 
       <ToDate>2016-05-31</ToDate> 
       <BillActivityCode tc="1"/> 
       <BillCreationDate>Since this is a CDATA section!</BillCreationDate> 
      </Bill> 
     </BillGroup>  
</BillEvent>   

即ちのみ&末尾のスペースをリードは、除去されるべきです。

XSLTを使用:

<xsl:stylesheet version ="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" method ="xml" indent = "yes" cdata-section-elements="BillCreationDate"/> 

<xsl:template match="node()|@*"> 
<xsl:copy> 
<xsl:apply-templates select="node()|@*"/> 
</xsl:copy> 
</xsl:template> 

<xsl:template match="text()"> 
<xsl:copy> 
<xsl:sequence-of select="replace(., '^\s+|\s+$', '')"/> 
</xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

を私もtranslate(.,' &#x9;&#xa;&#xd;', '') & replace(.,'^ +','')を試してみました。私は自分のコードに何が間違っているのか分からないので、自分のコードで何が間違っているのか分かりません。 私はこれに関する助けに感謝します。

答えて

1

replaceの正規表現が正しいです。問題は、テンプレートにxsl:copyがあることです。テキストはそのままコピーされ、テキストノードの子として何かを追加しようとすると意味がありません。

さらに、xsl:sequence-ofは有効なコマンドではありません(ただし、質問の誤字かもしれません)。

は...あなたの応答のための

<xsl:template match="text()"> 
    <xsl:value-of select="replace(., '^\s+|\s+$', '')"/> 
</xsl:template> 
+0

おかげで多くのことを、このテンプレートをお試しください。実際、私はこのツールをオンラインで利用可能なツールで試していましたが、これはエラーを投げていました。 FatalError:javax.xml.transform.TransformerException:関数が見つかりませんでした:replace FatalError:javax.xml.transform.TransformerException:関数トークンが見つかりません。 FatalError:javax.xml.transform.TransformerException:java.lang.NullPointerException'これを** xsl:sequence-of **に変更しました。テキスト値を何も印刷していないため、コピーを追加しました。とにかく、私の悪い。期待どおりに動作する別のツールでコードを試してみました。ありがとう。 :) –

+0

'replace'はXSLT 2.0でしか動作しないので、おそらく試した最初のツールはXSLT 1.0しかサポートしていませんでした。 –

+0

ええ、これからは、試してみる前に、これらのすべての詳細をチェックします。 –

関連する問題