【问题标题】:Add '(apostrophe) as a valid character in XSLT template在 XSLT 模板中添加 '(撇号) 作为有效字符
【发布时间】:2020-04-23 07:36:13
【问题描述】:

我正在那里做一个项目,他们提供了一个有效字符列表,应该按原样传递,除它们之外的任何其他字符都必须替换为?(问号)。 我公司的软件不允许使用替换功能,所以我必须使用翻译方法。

我可以添加除 '(撇号) 之外的所有有效字符。如何在变量 vAllowedSymbols 中包含撇号作为有效字符。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:variable name="vAllowedSymbols" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890/-?:(),.+ '"/>
<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="text()">
    <xsl:value-of select="
        translate(
            .,
            translate(., $vAllowedSymbols, ''),
            ''
            )
        "/>
</xsl:template>

输入:

<t>
<Name>@O'Niel</Name>
<Name>St: Peter</Name>
<Name>A.David</Name>
</t>

输出:

<t>
<Name>?O'Niel</Name>
<Name>St: Peter</Name>
<Name>A.David</Name>
</t>

【问题讨论】:

    标签: string xslt xslt-1.0 xslt-2.0 xslt-grouping


    【解决方案1】:

    使用

    <xsl:variable name="vAllowedSymbols">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890/-?:(),.+ '</xsl:variable>
    

    【讨论】:

      【解决方案2】:
      <xsl:variable name="vAllowedSymbols" select='"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890/-?:(),.+ &apos;"'/>
      

      让变量包含字符串而不是文本节点有一些优势。或者更准确地说,一个字符串,而不是一个包含文本节点的节点集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-04
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多