如何不转义 QDomText 中的 HTML 个特殊字符?
How do I not escape HTML special characters in QDomText?
我正在尝试使用 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 字符,例如 <
、>
、&
等他们在 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");
我正在尝试使用 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 字符,例如 <
、>
、&
等他们在 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");