XSLT从文本节点中删除空格

时间:2016-07-12 08:22:41

标签: xml xslt

我想从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(.,' &#x9;&#xa;&#xd;', '')&amp; replace(.,'^ +','')。我不确定我的代码有什么问题,因为它们都没有用。 我很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

replace中的正则表达式是正确的。问题是你在模板中有一个xsl:copy,它按原样复制文本,然后尝试添加一些东西作为文本节点的子项是没有意义的。

此外,xsl:sequence-of不是有效的命令(虽然这可能是你问题中的拼写错误)。

试试这个模板......

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