2016-07-12 65 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

是的,從現在開始,我會在嘗試之前檢查所有這些細節。 –