XSLT 将反斜杠转换为双反斜杠

XSLT translate backslash to double backslash

我需要转换这个值:

    <MediaFile>F:\DEMO\TEST\HELLO.pm4</MediaFile>

对此:

<MediaFile>F:\DEMO\TEST\HELLO.pm4</MediaFile>

我尝试了很多方法,翻译、连接、子字符串和替换,但我没有成功。

这正是我尝试过的:

源文件:

        <?xml version="1.0" encoding="UTF-8" ?>
<Asset version="1.0">
    <Target>
    <Name>HELLO</Name>
    <MediaFile>F:\DEMO\TEST\HELLO.mp4</MediaFile>

</Target>
</Asset>

XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output method="text" indent="yes" encoding="UTF-8"/>
    <xsl:template match="/">

        <xsl:variable name="MediaFile">
            <xsl:value-of select="Asset/Target/MediaFile"/>
        </xsl:variable>

        <xsl:variable name="Media">
            <xsl:value-of select="replace($MediaFile,'\','\')"/>
        </xsl:variable> 

            <xsl:element name="Media">
                <xsl:value-of select="$Media"/>
            </xsl:element>  
        </xsl:template>
</xsl:stylesheet>

我正在使用 xslt 2.0

有什么想法吗?谢谢

您需要替换以下内容

<xsl:value-of select="replace($MediaFile,'\','\')"/>

<xsl:value-of select="replace($MediaFile,'\','\\')" />

在许多编程语言中,反斜杠被用作转义字符,表示后面的字符需要特殊处理。在这种情况下,您需要将 \ 替换为 \ 的字符进行转义,还需要将 \ 替换为 \\(两个反斜杠)。

以下问题将有助于提供一些详细解释 What does back slash "\" really mean?

此外,在您共享的模板中,所需的输出是 text,因此无需创建名为 Media 的元素,因为如果需要输出,它就会出现是 XML。所以模板代码可以优化为

<xsl:template match="/">
    <xsl:value-of select="replace(Asset/Target/MediaFile,'\','\\')" />
</xsl:template>

输出

F:\DEMO\TEST\HELLO.mp4