JsTree с пользовательской структурой xml или json
У меня есть структура XML, которая выглядит так:
<RootFeature>
<Name>MainFeature</Name>
<Subfeatures>
<Feature>
<Name>Feature1</Name>
<Subfeatures>
<Feature>
<Name>Feature1_1</Name>
</Feature>
<Feature>
<Name>Feature1_2</Name>
</Feature>
<Feature>
<Name>Feature1_3</Name>
</Feature>
</Subfeatures>
</Feature>
<Feature>
<Name>Feature2</Name>
</Feature>
<Feature>
<Name>Feature3</Name>
</Feature>
<Feature>
<Name>Feature4</Name>
</Feature>
<Feature>
<Name>Feature5</Name>
</Feature>
<Feature>
<Name>Feature6</Name>
</Feature>
<Feature>
<Name>Feature7</Name>
</Feature>
</Subfeatures>
Я хотел бы использовать Jstree и создать дерево. Я попытался применить Jstree непосредственно к нему (XML), и у меня есть тот же результат, как описано в этой теме:
Заполнение jstree из строки xml
После преобразования его в Json (используя следующую библиотеку: https://goessner.net/download/prj/jsonxml/) у меня есть это:
"RootFeature":{
"Name":"Feature1",
"Subfeatures":{"Feature":[
{
"Name":"Feature1",
"Subfeatures":{"Feature":[
{"Name":"Feature1_1"},
{"Name":"Feature1_2"},
{"Name":"Feature1_3"}
]}
},
{"Name":"Feature2"},
{"Name":"Feature3"},
{"Name":"Feature4"},
{"Name":"Feature5"},
{"Name":"Feature6"},
{"Name":"Feature7"}
]}
Я искал, как применить Jstree к моей структуре, зная, что я должен следовать определенному формату, где <Name>
теги должны быть заменены <text>
, <Subfeatures>
от <children>
и избавиться от <Feature>
теги.
Я нашел эту тему на форуме: JsTree с пользовательскими данными JSON, но не смог применить решение.. и не совсем понял, если честно.
Я даже пытался рекурсивно воссоздать дерево, используя данные Json, но я не могу создать массив "Дети" с несколькими элементами с одинаковым именем "текст", каждый из которых имеет значение (как, наконец, файл Json). Это либо:
"Children":
"text1":"Feature1",
"text2":"Feature2",
"text3":"Feature3",
или же
"Children":
"0":"Feature1",
"1":"Feature2",
"2":"Feature3",
Если кто-нибудь знает, как я могу иметь дело с Jstree, используя мою структуру, или есть какие-либо идеи, милости просим.
Спасибо
1 ответ
jsTree ожидает данные в определенном формате для создания дерева. Ваша структура должна быть проанализирована в структуре JSON, аналогичной описанной здесь. Как только вы конвертируете XML в JSON, вы можете использовать синтаксический анализатор, как показано ниже.
function getFeature(s, t) {
t.text = s["Name"] ? s["Name"] : "";
if (s.hasOwnProperty("Subfeatures")) {
t.children = [];
s.Subfeatures.Feature.forEach(function (f, i) {
t.children.push({})
getFeature(f, t.children[i]);
});
}
}
function ParseData() {
//Convert XML to JSON prior to this.
var oSourceJSON = {
"RootFeature": {
"Name": "Feature1",
...
...
...
};
var result = [];
if (oSourceJSON.hasOwnProperty("RootFeature")) {
result.push({});
getFeature(oSourceJSON.RootFeature, result[0]);
}
return result;
}
$(document).ready(function () {
$('#jstree_demo_div').jstree({
core: {
//Note: If you use an external service use a callback method here
data: ParseData()
}
});
});