在 xquery 中转义大于 javascript 中的符号

Escaping greater than symbols in javascript within xquery

我正在尝试在我的 xquery 中嵌入一小段 javascript,但我似乎无法让大于符号起作用。我已经避开了它们,但是当我查看结果时,它们在我的 javascript 代码中显示为 >。

这是我的代码:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";

xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> &gt; This works...
<script>
var five = 5;
var is_more = function(n) {{
    if n &gt; 2 {{
        return "Yes";
    }} else {{
        return "no";
    }};
}}
console.log(is_more(five));
</script>
</html>

但是虽然转义适用于文本,但它在我的 javascript 中不起作用:

我确定这很明显,但我对 xquery 还很陌生。

将脚本放在评论区。您还需要在 if 语句中使用括号。

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";

xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> &gt; This works...
    <script>
        <!--
        var five = 5;
        var is_more = function(n) {
            if (n > 2) {
                return "Yes";
            } else {
                return "no";
            };
        }
        console.log(is_more(five));
        -->
    </script>
</html>

只需将实际脚本放入 commented out CDATA tags (//<![CDATA[ ... //]]>) or XML comments (//<!-- ... -->),这将防止 <>& 字符被编码为 XML 个实体。

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";

xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> &gt; This works...
<script>
//<![CDATA[
var five = 5;
var is_more = function(n) {{
    if (n > 2) {{
        return "Yes";
    }} else {{
        return "no";
    }};
}}
console.log(is_more(five));
//]]>
</script>
</html>

CDATA 标签是更优雅的方式,但取决于序列化选项集(某些引擎可能会删除它们)。当没有显式设置序列化选项时,注释可能更能避免失败,这在 XQuery 1.0 中可能会很困难,因为它在 XQuery 3.0 之前没有标准化。将文档定义为 XHTML 还应该触发浏览器正确解析实体并使用 JavaScript 的解码字符。