使用 XSLT 翻译函数或更好的方法删除单引号和双引号
Removing both single and double quotes using XSLT translate function or better approach
我正在使用 XSLT 1.0 和 XML。我是这些主题的新手,但我一直在阅读和尝试如何将 XSLT 应用于 XML。
现在,我给出了一个项目,我需要从 XML 元素中过滤掉无效字段。 java 转换器 class 用于在 XML 上应用 XSLT。
java 代码类似于 "Writing an XSLT Transform" 部分下的 oracle 教程页面。我添加了下面的 xml 和 xsl 和 运行 教程中描述的代码 page.My 目标是提取单引号和双引号以及以下字符 #60;•^#x6;
XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<Author>
<Name>
<FirstName>Ch#60;•^#x6;'""ris</FirstName>
<LastName>Banville</LastName>
</Name>
</Author>
XSL 文件
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:variable name="invalid">#60;•^#x6;"'</xsl:variable>
<div>
<xsl:value-of select="translate(/Author/Name/FirstName,$invalid,'')" />
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
最终输出为
<body>
<div>Chris</div>
</body>
我的问题是,使用 XSLT 1.0 将单引号和双引号以及其他无效字符一起转义时,正确的方法是什么?我也试过嵌套
translate
创建“单”和“双”变量后的 XSLT 函数如下所示。
<xsl:value-of select="translate(translate(/Author/Name/FirstName,$single,''),$double,'')" />
我仍然不确定使用我当前的任何实现的利弊,或者即使它是执行此类任务的正确方法。
Within expressions, literal strings are delimited by single or double quotation marks, which are also used to delimit XML attributes. To avoid a quotation mark in an expression being interpreted by the XML processor as terminating the attribute value the quotation mark can be entered as a character reference ("
or '
). Alternatively, the expression can use single quotation marks if the XML attribute is delimited with double quotation marks or vice-versa.
这意味着在仅使用文字字符串的单个表达式中,您可以通过以下方式删除双引号字符:
<xsl:value-of select="translate(input, '"'')"/>
或单引号(撇号)字符:
<xsl:value-of select='translate(input, "'", "")'/>
但不是两者。
定义一个包含所有不需要的字符的变量作为文字文本(就像您所做的那样)可能是解决此限制的最佳方法。
我正在使用 XSLT 1.0 和 XML。我是这些主题的新手,但我一直在阅读和尝试如何将 XSLT 应用于 XML。
现在,我给出了一个项目,我需要从 XML 元素中过滤掉无效字段。 java 转换器 class 用于在 XML 上应用 XSLT。
java 代码类似于 "Writing an XSLT Transform" 部分下的 oracle 教程页面。我添加了下面的 xml 和 xsl 和 运行 教程中描述的代码 page.My 目标是提取单引号和双引号以及以下字符 #60;•^#x6;
XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<Author>
<Name>
<FirstName>Ch#60;•^#x6;'""ris</FirstName>
<LastName>Banville</LastName>
</Name>
</Author>
XSL 文件
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:variable name="invalid">#60;•^#x6;"'</xsl:variable>
<div>
<xsl:value-of select="translate(/Author/Name/FirstName,$invalid,'')" />
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
最终输出为
<body>
<div>Chris</div>
</body>
我的问题是,使用 XSLT 1.0 将单引号和双引号以及其他无效字符一起转义时,正确的方法是什么?我也试过嵌套
translate
创建“单”和“双”变量后的 XSLT 函数如下所示。
<xsl:value-of select="translate(translate(/Author/Name/FirstName,$single,''),$double,'')" />
我仍然不确定使用我当前的任何实现的利弊,或者即使它是执行此类任务的正确方法。
Within expressions, literal strings are delimited by single or double quotation marks, which are also used to delimit XML attributes. To avoid a quotation mark in an expression being interpreted by the XML processor as terminating the attribute value the quotation mark can be entered as a character reference (
"
or'
). Alternatively, the expression can use single quotation marks if the XML attribute is delimited with double quotation marks or vice-versa.
这意味着在仅使用文字字符串的单个表达式中,您可以通过以下方式删除双引号字符:
<xsl:value-of select="translate(input, '"'')"/>
或单引号(撇号)字符:
<xsl:value-of select='translate(input, "'", "")'/>
但不是两者。
定义一个包含所有不需要的字符的变量作为文字文本(就像您所做的那样)可能是解决此限制的最佳方法。