我正在尝试使用描述xml文档的字符串中的数据填充jstree容器。这是我的代码,带有简化的xml文档:
var xmlText = "<root>A<node>B</node></root>";
var xml = (new DOMParser()).parseFromString(xmlText,'text/xml');
$('#jstree').jstree({"core": {data: xml.documentElement}});
(也在codepen上:http://codepen.io/szymtor/pen/XKqApq/)。
结果是结构良好的树,但没有节点标签(见下图)。我应该如何提供节点标签?或者我做错了吗?
答案 0 :(得分:4)
对XML的支持似乎有限。版本3的文档仅提及jstree()
的{{3}}或HTML输入,即使在早期版本中有一个JSON可以激活以支持XML。
我建议您通过使用此函数将XML转换为JSON来解决此问题:
function xmlToJson(xmlNode) {
return {
text: xmlNode.firstChild && xmlNode.firstChild.nodeType === 3 ?
xmlNode.firstChild.textContent : '',
children: [...xmlNode.children].map(childNode => xmlToJson(childNode))
};
}
见这个例子:
function xmlToJson(xmlNode) {
return {
text: xmlNode.firstChild && xmlNode.firstChild.nodeType === 3 ?
xmlNode.firstChild.textContent : '',
children: [...xmlNode.children].map(childNode => xmlToJson(childNode))
};
}
var xmlText = "<root>A<node>B<node>C</node></node></root>";
var xml = (new DOMParser()).parseFromString(xmlText,'text/xml');
$('#jstree').jstree({
core: {
data: xmlToJson(xml.documentElement)
}
});
&#13;
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
<div id="jstree">
</div>
&#13;