我正在尝试使用 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 代码中,它转义了 <将其替换为 &lt; 的字符,给出以下输出,该输出不是有效的 Javascript:

<script type="text/javascript"> 
    if(x &lt; 0){ 
        /*do something*/ 
    } 
</script> 

我在 Qt 文档中搜索了解决方案,但没有找到任何内容。

解决方法可能是替换 &lt;<通过执行 stream << document.toString().replace("&lt;", "<") 写入文件时,但也可能出现 &lt;在我想保留的 Javascript 代码之外。

我还可以想到一些 Javascript 技巧来检查数字是否为负数,而不使用任何特殊的 HTML 字符,例如 if(String(x).indexOf('-') != -1) ,但我想知道是否有更好的方法。

我的问题是如何创建 QDomText对象的文本包含特殊 HTML 字符,如 < , > , &等,而不会在 QDomDocument::toString() 中转义它们?

请您参考如下方法:

您可以将 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"); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!