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

标签 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 , 如果 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);
        }
    };

最佳答案

这对于写在注释中来说有点太长了,但假设您将 someText 设置为“嘿”。如果你只是这样做

 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 更改为使用参数。我相信,尤其是因为“selectSingleNode”仅在 Internet Explorer 中受支持。

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

关于javascript - 当字符串包含单引号时使用js替换XSL变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184997/

相关文章:

xml - xpath根据 child 的属性值删除节点

javascript - 根据分辨率渲染 html

javascript - 在文本/链接内容旁边放置图像

javascript - 尝试输入日期时出现 "read property ' length' of undefined"

java - 使用 jackson-dataformat-xml 库将 XML 中的空标记转换为 java 属性

android - Android Studio 3.0 渲染问题

javascript - 通过脚本编辑器从 SharePoint 上的 Javascript 内部调用 CSS

java - 如何使用 Java 替换 XML 文档中的文本

java - 使用 XSD、目录解析器和用于 XSLT 的 JAXP DOM 验证 XML

java - XSLT:在 Eclipse 项目资源而不是外部资源的输出 PDF 上显示图像