我有一个 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 时,它不起作用。我什至试图用\替换'。
更新:
在发布问题之前,我在 xslt concat 函数中尝试了scape 单引号,但它对我没有帮助。
我使用 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 中设置参数。例如,请参见如何将参数从 Javascript 函数传递到 XSLT。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句