給定這樣的 XML 檔案:
<Root>
<Child1>
<ChildOfChild1_1>
<FinalChild> </FinalChild>
</ChildOfChild1_1>
<ChildOfChild1_2> </ChildOfChild1_2>
</Child1>
<Child2>
<ChildOfChild2_1> </ChildOfChild2_1>
</Child2>
<Child3> </Child3>
</Root>
我想回傳一個只有兩個引數的物件,名稱和孩子。它看起來像:
{
name: "Root"
children: [
{
name: "Child1"
children: [
{
name: "ChildOfChild1_1"
children:[
{
name: "FinalChild"
children: null
}
]
},
{
name: "ChildOfChild1_2"
children: null
}
]
},
{
name: "Child2"
children: [
{
name: "ChildOfChild2_1"
children: null
}
]
},
{
name: "Child3"
children: null
},
]
}
我不關心節點屬性,只關心nodeName他們是否有孩子。我撰寫了代碼來獲取第一級子級,但無法將我的頭繞在遞回部分以盡可能深入。謝謝。
以下是我到目前為止的內容:
//assuming block is the root node and the root will at least have 1 child
let root = {
name = '',
children = []
};
root.name = block.nodeName;
for(let i=0 ; i<block.children.length ; i ) {
root.children.push(getChildren(block.children[i]));
}
function getChildren(data) {
let child = {};
child.name = data.nodeName;
child.children = []; //stuck here
return child;
}
uj5u.com熱心網友回復:
這個任務比你想象的要簡單得多。
您需要一個回傳節點名稱和節點子節點串列的函式,每個子節點都以完全相同的方式處理:
function toObject(node) {
return {
name: node.nodeName,
children: [...node.children].map(toObject)
};
}
而已。
const xmlDoc = new DOMParser().parseFromString(`<Root>
<Child1>
<ChildOfChild1_1>
<FinalChild> </FinalChild>
</ChildOfChild1_1>
<ChildOfChild1_2> </ChildOfChild1_2>
</Child1>
<Child2>
<ChildOfChild2_1> </ChildOfChild2_1>
</Child2>
<Child3> </Child3>
</Root>
`, "application/xml");
function toObject(node) {
return {
name: node.nodeName,
children: [...node.children].map(toObject)
};
}
const tree = toObject(xmlDoc.documentElement);
console.log(tree);
如果你真的想要null沒有孩子(空陣列更容易處理,相信我),我相信你可以toObject自己做出必要的改變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436610.html
標籤:javascript xml
