用XSLT替换XML中的值

时间:2019-03-21 20:01:03

标签: xml xslt xslt-2.0

我正在处理类似

的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<Properties>
    <Property>
        <Name>Email</Name>
        <Value>alebbb@hotmail.com</Value>
    </Property>
    <Property>
        <Name>Resposta</Name>
        <Value>here i have ; to be replace by nothing</Value>
    </Property>
    <Property>
        <Name>NPS</Name>
        <Value>8</Value>
    </Property>
</Properties>

我的地图XSLT就像:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
  <xsl:strip-space elements="*"/>
    <xsl:template match="Properties">
       <xsl:variable name="Email" select="/Properties/Property[1]/Value/text()"/>
       <xsl:variable name="Resposta" select="/Properties/Property[2]/Value/text()"/>
       <xsl:variable name="NPS" select="/Properties/Property[3]/Value/text()"/>
       <xsl:value-of select="normalize-space($Email)"/>;<xsl:value-of select="normalize-space($Resposta)"/>;<xsl:value-of select="normalize-space($NPS)"/>
    </xsl:template>
</xsl:stylesheet>

如何替换“;”在我的XSLT映射上什么都没有使用replace? 例如:这里有“;”一无所有。
并期望:在这里我什么也不能代替。

2 个答案:

答案 0 :(得分:1)

您可以使用XPath-1.0函数fn:translate轻松实现这一目标。
因此,将您的xsl:value-of更改为

<xsl:value-of select="normalize-space(translate($Email,';',''))"/>;<xsl:value-of select="normalize-space(translate($Resposta,';',''))"/>;<xsl:value-of select="normalize-space(translate($NPS,';',''))"/>

答案 1 :(得分:1)

首先,在XSLT 2.0中,您具有序列,并且可以使用separator指令的value-of属性。因此,在迈克尔·凯(Michael Kay)对translate发表评论之后,仅将您的value-of指令更改为:

<xsl:value-of select="$Email, normalize-space(translate($Resposta,';','')), $NPS"
     separator=";" />

输出:

alebbb@hotmail.com;here i have to be replace by nothing;8

第二,如果您确实要使用fn:replace

<xsl:value-of select="$Email, normalize-space(replace($Resposta,';','')), $NPS"
     separator=";" />