在XSLT中删除双引号和斜杠

时间:2018-05-22 21:24:38

标签: xml xslt

我正在尝试在执行XSLT转换时过滤掉问题字符(引号和斜杠)但无法实际删除它们。我在这里尝试了几种提议的解决方案,但它们都没有成功:

Replace special characters in XSLT

Removing double quotes in XSL

XSL: replace single and double quotes with ' and "

理想情况下,我希望用某些标记的单词替换字符,例如引号斜杠,但此时我可以很好地剥离他们现在出去了。

我只是在几个选择上运行它,所以它不应该那么难。我不确定出了什么问题。

<xsl:value-of select="ns3:stepTitle"/>

编辑:

需要使用XML 1.0。

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*/text()">
        <xsl:value-of select="translate(., '\&quot;', '*quote*')"/>
    </xsl:template>

</xsl:stylesheet>

XML:

<test>
  I need to remove "quotes" and slashes /\ from here.
</test>

结果是:

<?xml version="1.0" encoding="UTF-16"?>
<test>
  I need to remove qquotesq and slashes /* from here.
</test>

2 个答案:

答案 0 :(得分:0)

它不是100%清楚您的问题是什么,但我猜它是this old thread from 2001中描述的问题的变体。如果是这样,以下是一个示例XSLT 1.0样式表,用于将ASCII撇号字符替换为U + 2019 RIGHT SINGLE QUOTATION MARK(Unicode代码点8217十进制)字符。 &#34;技巧&#34;是定义一个包含包含撇号字符的单字符字符串的变量,然后在调用translate()时使用该变量(但也可以与concat()一起使用来创建带有撇号字符的字符串):< / p>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="text()">
    <xsl:variable name="apos" select='"&apos;"'/>
    <xsl:variable name="string-containing-quotes" select="."/>
    <xsl:variable name="string-with-quotes-replaced"
         select="translate($string-containing-quotes, $apos, '&#8217;')"/>
    <xsl:value-of select="$string-with-quotes-replaced"/>
  </xsl:template>
</xsl:stylesheet>

您可以使用测试XML输入文档(例如

)测试样式表
<test>
  Text containing 'apostrophe' characters
</test>

答案 1 :(得分:0)

translate函数的已知功能可能不够广泛替换 string(3-rd参数)可以更短 from string(2nd argument)。

在这种情况下, source 字符串中的字符(第一个参数):

  • 出现在 from 字符串
  • 替换字符串
  • 中没有相应的字符

已删除。

所以你必须使用translate(., '/&quot;', '')

来自字符串的有2个字符:斜杠(/)和双引号&quot; replace 字符串为空,因此这两个字符都将被删除。

示例脚本如下:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="*/text()">
    <xsl:value-of select="translate(., '/&quot;', '')"/>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  </xsl:template>
</xsl:stylesheet>

注意:在您的示例中,您设置了反斜杠(不是正斜杠)。