删除特殊字符XSLT

时间:2017-03-23 15:37:38

标签: xslt xslt-1.0

我一直收到此错误消息

  

必填属性'选择'不见了。

我之前已经使用过此代码并且工作正常,但似乎它不适用于

<xsl:output method="text" />

希望你能帮助我。

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:wd="urn:com.workday.report/Sample_Outbound">

    <xsl:output method="text" />
            <xsl:variable name="linefeed" select="'&#xA;'"></xsl:variable>
            <xsl:variable name="StreetAddress1">Street Address 1</xsl:variable>

    <xsl:template match="wd:Report_Data">
        <File>
            <!-- Header -->
            <Header>
                <StreetAddress1>
                    <xsl:value-of select="$StreetAddress1" />
                </StreetAddress1>
                <xsl:value-of select="$linefeed" />
            </Header>

            <xsl:for-each select="wd:Report_Entry">
                <Record>
                    <Work_Street_Address_1>
                        <xsl:call-template name="Remove-Special-Characters-Commas">
                        <xsl:with-param name="normalize-string"
                             select="wd:Work_Street_Address_1"  />
                        </xsl:call-template>
                    </Work_Street_Address_1>

                    <xsl:value-of select="$linefeed" />
                </Record>
            </xsl:for-each>
        </File>
    </xsl:template>

    <xsl:template name="Remove-Special-Characters-Commas">
        <xsl:param name="normalize-string" />
        <xsl:variable name="AllowedSymbols"
            select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@/;\'&apos;_&amp;'" />
        <xsl:variable name="stringValuePreformatted"
            select="translate($normalize-string,'àâäèéêëîïôœùûüÿÀÁÄÈÉÊËÎÏÔŒÙÛÜŸçÇáéíóúÁÉÍÓÚäöüÄÖÜßàèéìòóùÀÈÉÌÒÓÙáéíóúüÁÉÍÓÚÜñÑ¿¡','aaaeeeeiioeuuuYAAAEEEEIIOEUUUYCCaeiouAEIOUaouAOUBaeeioouAEEIOOUaeiouuAEIOUUnN?1')" />
        <xsl:value-of
            select="normalize-space(translate($stringValuePreformatted, translate($stringValuePreformatted, $AllowedSymbols,''),''))" />
    </xsl:template>

</xsl:stylesheet>

行错误是

line 39: Error parsing XPath expression ''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@/;\''_&''.
line 39: Required attribute 'select' is missing.

enter code here

由于

3 个答案:

答案 0 :(得分:0)

解决问题的最简单方法是从:

更改变量的定义
<xsl:variable name="AllowedSymbols"
       select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@/;\'&apos;_&amp;'" />

为:

<xsl:variable name="AllowedSymbols">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@;&apos;_&amp;</xsl:variable>

或者,您可以像这样切换单引号和双引号:

<xsl:variable name="AllowedSymbols"
       select='"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@;&apos;_&amp;"'/>

然后你无法在列表中添加双引号。

答案 1 :(得分:-1)

替换你的行

<xsl:variable name="AllowedSymbols" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@/;\'&apos;_&amp;'" /> 

通过

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="AllowedSymbols" select="concat('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,#():@/;_\&amp;',$apos)" />

一切都应该按预期工作 在这种方法中,我使用this SO answer通过使用变量来处理'情况。

答案 2 :(得分:-1)

问题的根源是&apos;。用2个撇号替换它。