javascript - 从 xml 字符串填充 jstree

标签 javascript xml jstree

我正在尝试使用描述 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/)。

结果是一棵结构良好的树,但没有节点标签(见下图)。我应该如何提供节点标签?还是我做错了?

resulting jstree

最佳答案

对 XML 的支持似乎有限。版本 3 的文档仅提及 HTMLJSON jstree() 的输入,即使在早期版本中有一个 xml_data plug-in可以为 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)
    }
});
<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>

关于javascript - 从 xml 字符串填充 jstree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38535253/

相关文章:

c# - 有没有办法将 xml 转换为 json?

jquery - JSTree 加载延迟加载不适用于我的资源 url 但适用于示例 url

javascript - 在 jsTree 的上下文菜单中创建功能不起作用

javascript - jstree 使用 html 将按钮添加到节点并使用上下文菜单重命名

javascript - 如何检查用户在浏览器中输入地址URL并点击书签?

javascript - 禁止在动画期间单击某个元素

xml - <xsl :apply templates> How to apply multiple templates/translations

javascript - AnimationEnd 隐藏另一个 div

javascript - 从 Meteor.js 中的数组中删除项目

xml - 如何在 CheckBox 中启用文本换行