当字符串包含单引号时,使用js替换XSL变量的值

时间:2019-05-17 10:55:01

标签: javascript xml xslt

我的XSL如下:

<xsl:template match="/">
    <xsl:variable name="vartext" select="''" />

....
             <th>
                <xsl:value-of select="$vartext"/>
              </th>

我使用js设置vartext的值,如下所示:

node = this.xsldoc.selectSingleNode('//xsl:variable[...]']');
node.setAttribute('select', sometext);

https://www.w3schools.com/xml/ref_xsl_el_variable.asp的Accordint,如果select属性包含文字字符串,则该字符串必须在引号内。

但是该变量可能包含类似“'Hey d'text'”的值。

因此,当我想使用提供的XSL转换XML时,它将无法工作。我什至尝试用'替换'。

更新

我尝试了scape single quote in xslt concat function  在发布问题之前,它并没有帮助我。

我使用XSL的方式如下:

var res = xsltDo(this.xmldoc, this.xsldoc, this.html_element, iOptionParent);

xsltDo = function (xml, xsl, target, iOptionParent) {
        try {
            if (!iOptionParent) target.innerHTML = "";
            var fragment = xml.transformNode(xsl);
            target.innerHTML += fragment;
            //$( window ).trigger( "XsltDone", [target] );

            if (window.AC !== undefined) {
                window.AC.onDomChange(target);
            }

            return true;
        }
        // si erreur on retourne une XsltError
        catch (err) {
            return new Error(err);
        }
    };

1 个答案:

答案 0 :(得分:1)

这个时间太长了,无法写评论,但是假设您将someText设置为“ Hey”。如果您只是这样做

 node.setAttribute('select', someText);

然后,这与直接在XSLT中执行此操作一样

 <xsl:variable name="vartext" select="Hey" />

这将选择一个名为“ Hey”的元素,而不是文本文字“ Hey”

这是你能做的...

 node.setAttribute('select', '"' + someText + '"');

这等效于在XSLT中执行此操作

 <xsl:variable name="vartext" select='"Hey"' />

如果您的someText变量中带有单引号,这也将起作用,并且无需在javascript中对其进行转义。但是,如果您在"中有一个引号someText,它将失败。

要处理撇号和引号,更容易的是删除select属性,并将文本添加为​​子节点

node.removeAttribute("select");
node.appendChild(xsl.createTextNode(someText));

这与执行此操作相同...

<xsl:variable name="vartext">Hey 'Text "It works!"</xsl:variable>

当然,您真正应该做的是更改XSLT以使用参数。我认为,不仅如此,因为Internet Explorer仅支持“ selectSingleNode”。

如果您可以更改XSLT以使用参数,则StackOverflow上还有其他问题,表明您必须使用Java脚本设置参数。例如,请参见How to pass parameter to XSLT from Javascript function