我想从XML的文本值中修剪额外的空格。我通过互联网尝试了各种选项,但没有一个适合我。 我不能使用 normalize-space(),因为我只需删除领先&尾随空格。
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>
即。只领先&amp;应删除尾随空格。
使用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(.,' 	

', '')
&amp; replace(.,'^ +','')
。我不确定我的代码有什么问题,因为它们都没有用。
我很感激任何帮助。
答案 0 :(得分:1)
replace
中的正则表达式是正确的。问题是你在模板中有一个xsl:copy
,它按原样复制文本,然后尝试添加一些东西作为文本节点的子项是没有意义的。
此外,xsl:sequence-of
不是有效的命令(虽然这可能是你问题中的拼写错误)。
试试这个模板......
<xsl:template match="text()">
<xsl:value-of select="replace(., '^\s+|\s+$', '')"/>
</xsl:template>