【问题标题】:XSLT translate backslash to double backslashXSLT 将反斜杠转换为双反斜杠
【发布时间】:2018-06-01 19:01:07
【问题描述】:

我需要转换这个值:

    <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

有什么想法吗?谢谢

【问题讨论】:

  • 您可以使用哪个版本的 XSLT? XSLT 2 或 3 提供所有 XPath 2 或 3 函数,例如 replace w3.org/TR/xpath-functions/#func-replace
  • XSLT 2.0,我尝试替换但没有得到任何好处,我确定我做的不对..
  • 您能否编辑您的问题以显示您尝试过的内容(在 XSLT 2.0 中,带有替换)。你可能已经不远了......
  • 我只是编辑我的问题,是的,我可能在某个时候已经关闭了它......
  • 反斜杠常用于改变下一个字符的行为。例如:\n 代表换行符。因此,要指示文字反斜杠,通常需要写 '\\'。因此,请尝试将 '\\' 替换为 '\\\\'。

标签: json xslt path unc slash


【解决方案1】:

你需要替换下面的

<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

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 2013-04-15
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2020-02-01
    • 2010-09-11
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多