我正在尝试在执行XSLT转换时过滤掉问题字符(引号和斜杠)但无法实际删除它们。我在这里尝试了几种提议的解决方案,但它们都没有成功:
Replace special characters in XSLT
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(., '\"', '*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>
答案 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='"'"'/>
<xsl:variable name="string-containing-quotes" select="."/>
<xsl:variable name="string-with-quotes-replaced"
select="translate($string-containing-quotes, $apos, '’')"/>
<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 字符串中的字符(第一个参数):
已删除。
所以你必须使用translate(., '/"', '')
。
来自字符串的有2个字符:斜杠(/
)和双引号"
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(., '/"', '')"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
注意:在您的示例中,您设置了反斜杠(不是正斜杠)。