更新1
这里是我当前如何加载文本到我的WT项目。
wApp->require("ace.js");
//orignal XML, reads in incorrectly on one line
//std::string data = ReadFile("Q:\\settings.xml");
//XML after being formatted in notepad to look like xml, reads in correctly
//std::string data = ReadFile("Q:\\settings.txt");
//changed extension back to XML, edited in notepad++ to XML format, reads in correctly
std::string data = ReadFile("Q:\\settings_from_text.xml");
//test xml tag, reads in correctly
//std::string data = "<tag_1>some tag content</tag_1>";
//test xml tag with newline, reads in incorrectly on one line, doesnt read newline
//std::string data = "<tag_1>some tag content</tag_1>\n<tag_1>some tag content</tag_1>";
_ace_editor = new WText(data, Wt::PlainText);
//_ace_editor->setText(data);
_ace_editor->setInline(false);
// A WContainerWidget is rendered as a div
_ace_editor->resize(1000, 500);
std::string editor_ref = _ace_editor->jsRef(); // is a text string that will be the element when executed in JS
std::string command =
editor_ref + "._ace_editor = ace.edit(" + editor_ref + ");" +
editor_ref + "._ace_editor.setTheme(\"ace/theme/chrome\");" +
editor_ref + "._ace_editor.getSession().setMode(\"ace/mode/xml\");";// +
//editor_ref + "._ace_editor.setValue(\"" + data + "\");";
_ace_editor->doJavaScript(command);
另外,这里是ReadFile函数
std::ifstream in(path, std::ios::in | std::ios::binary);
if(in)
{
std::string contents;
in.seekg(0, std::ios::end);
contents.resize(in.tellg());
in.seekg(0, std::ios::beg);
in.read(&contents[0], contents.size());
in.close();
return(contents);
}
throw(errno);
原帖
我试图将一些XML文件加载到一个ACE( http://ajaxorg.github.io/ace/#nav=about我嵌入在WT)编辑器( http://www.webtoolkit.eu/wt?wtd = rqBfShGlNupXgK3M1sWOxUk1Loz3BsW0 )页。 问题是,XML文件,无论出于何种原因都他们的标签从负载省略。 例如:包含以下内容的XML文件
<?xml version="1.0"?>
<settings>
<tag_1>some tag content</tag_1>
<tag_2/>
</settings>
将被加载
some tag content
我需要整个XML文件的,不只是标签的内容。
做了一些研究之后,我发现了不少其他的人在不同的论坛上问同样的事情,但一切我都试过,到目前为止一直没有工作,在这里给我带来。
这包括设置王牌模式到XML,试图将其设置为王牌窗口,改变颜色方案之前加载在不同的容器中的文本,和解析以不同的方式的文件。
我使用Visual Studio 2010,并从调试,我可以看到,文件确会读完全与所有标记的字符串,但它被设置为王牌窗口后,他们被省略。
在XML XML片段......你能以某种期待您的浏览器会解释它们,除非正确转义。 尝试这个:
txt = new WText("<bla>something</bla>", Wt::PlainText);
这将转义所有XML十岁上下的字符在文本。
重量的默认(XHTMLText)将尝试解析您的输入为XML,如果它成功从XML发送它作为XML浏览器之前过滤可能的XSS载体。 如果它不能解析文本作为XML,它会逃跑XML十岁上下的人物,以避免与自由的解析器浏览器会无意中执行攻击向量。
第三个选项(XHTMLUnsafeText)绕过XSS过滤 - 危险,所以只有使用它时,你知道你的文字是安全的,并且不能由用户直接或间接的影响。
无论你把它的WT页面上与否,底线这是一个JavaScript的问题,因为这是ACE的编辑器是什么,一个JavaScript工具。 既然你没有什么显示在所有关于你如何加载XML内容,我只能猜测,你必须写XML文件的内容到页面输出源? 如果你查看源代码,你看到的标签我敢打赌? 那么,如果这样你要它错了。 xml文件需要通过JavaScript / AJAX被加载,因为我将与下面工作的完整示例演示(编辑在$就调用“网址” XML文件的位置,您的服务器上),这说明标签和所有内容xml文件的。 加入jQuery库只为Ajax请求的代码的简单性。 请享用!
<!DOCTYPE html>
<html lang="en">
<head>
<title>ACE in Action</title>
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div id="editor"></div>
<script src="http://rawgithub.com/ajaxorg/ace-builds/master/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script>
var callback = function (data, status, xhr) {
//data will be the xml returned from the server
if (status == 'success') {
var editor = ace.edit("editor");
//apparently, only modes supported are 'html', 'javascript' & 'text'
editor.getSession().setMode("ace/mode/html");
editor.setValue(data);
}
};
//using jQuery to fire off an ajax request to load the xml,
//using our callback as the success function
$.ajax(
{
url : '/testing/cd_catalog.xml',
dataType : 'text', //explicitly requesting the xml as text, rather than an xml document
success : callback
}
);
</script>
</body>
</html>
其实,我收回我说过的一些“必须通过JavaScript / AJAX加载”,因为我现在知道你刚才下面把内容插入到编辑器的div事先的ACE的例子。 如果你想做到这一点与HTML或XML内容,标签将被浏览器评估,显示不出来的,除非你复制编辑DIV的innerHTML然后实例化编辑器,然后将它的值之前保存的innerHTML。 例如:
<div id="editor"><?xml version="1.0" encoding="ISO-8859-1">
<books>
<text>some text content</text>
<book/>
</books></div>
<script src="http://rawgithub.com/ajaxorg/ace-builds/master/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
var txt = document.getElementById('editor').innerHTML;
var editor = ace.edit("editor");
//editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/html");
editor.setValue(txt);
</script>