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
我需要转换这个值:
<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