【发布时间】:2019-05-17 10:55:01
【问题描述】:
我有一个如下的 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,如果选择属性包含文字字符串,则该字符串必须在引号内。
但变量可能包含像“'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);
}
};
【问题讨论】:
-
如果您使用的是
node.setAttribute,那么您不必担心转义,因为这仅适用于在解析和处理之前的初始 XSLT 文件。我认为您可能需要更多地解释您正在使用的过程(例如,您如何阅读和应用 XSLT),并准确解释“它不起作用”的意思。谢谢! -
从您显示的片段中,也许您实际上应该使用参数 (
xsl:param) 而不是尝试以这种方式操作 XSLT。 -
@R3tep 我没有连接字符串,所以该解决方案对我不起作用。
-
我想知道您真正想要达到的目标是什么?真的有必要通过修改源样式表来做到这一点吗?不能通过为
xsl:param参数提供值来完成吗?请记住,除非您非常小心,否则修改源代码总是会带来注入攻击的风险。 -
@BabakFakhriloo 参数化 XSLT 转换的正确机制是按照 Kay 博士的建议使用
xsl:param声明。虽然不标准,但在 Javascript 中有一个很好的跨浏览器界面XSLTProcessor。
标签: javascript xml xslt