Заменить значение в XML на XSLT - PullRequest
0 голосов
/ 21 марта 2019

Я работаю над 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?
Например: здесь у меня есть ";" быть замененным ничем.
И ожидаемо: здесь я ничего не должен заменить.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Во-первых, в XSLT 2.0 у вас есть последовательности, и вы можете использовать атрибут separator инструкции value-of.Итак, следуя комментариям Майкла Кея о 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=";" />
1 голос
/ 21 марта 2019

Этого легко достичь с помощью функции 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,';',''))"/>
...