我正在尝试使用Qt XML创建包含Javascript的HTML文档。这是我的Qt代码的相关部分:
QDomDocument document;
//Create head, body, etc
QDomElement script = document.createElement("script");
script.setAttribute("type", "text/javascript");
body.appendChild(script); //body is the QDomElement representing the <body> tag
QDomText scriptText = document.createTextNode("if(x < 0){\n/*do something*/\n}");
script.appendChild(scriptText);
QFile file("C:\\foo.html");
file.open(QIODevice::WriteOnly);
QTextStream stream(&file);
stream << document.toString();
问题是,在Javascript代码中,它正在转义用<
替换它的<
字符,给出以下无效的输出Javascript:
<script type="text/javascript">
if(x < 0){
/*do something*/
}
</script>
我在Qt文档中搜索了一个解决方案,但没有找到任何内容。
解决方法可能是通过执行<
在文件中写入时将<
替换为stream << document.toString().replace("<", "<")
,但在Javascript代码之外可能还会出现<
我想独自留下。
我还可以考虑一些Javascript技巧来检查一个数字是否为负而不使用任何特殊的HTML字符,例如if(String(x).indexOf('-') != -1)
,但我想知道是否有更好的方法来做到这一点
我的问题是如何创建一个QDomText
对象,其中的文字包含<
,>
,&
等特殊HTML字符,而不会在{{{ 1}}?
答案 0 :(得分:1)
您可以将javascript代码放在CDATA部分中:
QDomElement script = document.createElement("script");
script.setAttribute("type", "text/javascript");
body.appendChild(script);
QString js = "if(x < 0){\n/*do something*/\n}";
QDomCDATASection data = document.createCDATASection(js);
script.appendChild(data);
然后立即删除不需要的文字:
QString text = document.toString();
text.replace("<![CDATA[", "\n");
text.replace("]]>", "\n");