例如
树:
A
A1 A2
序列化为 xml:
<A> <A1> </A1> <A2> </A2> </A>
似乎根优先遍历(前序)或根最后遍历(后序)都不足以实现这一点。
这样做的好方法是什么?
例如
树:
A
A1 A2
序列化为 xml:
<A> <A1> </A1> <A2> </A2> </A>
似乎根优先遍历(前序)或根最后遍历(后序)都不足以实现这一点。
这样做的好方法是什么?
答案主要取决于您如何定义“好”。
无论是预购还是后购都不是很好。严格应用时,它们要求在处理子项之前/之后对根进行完全处理。在这种解释中,两者都要求您在内存中构建字符串,例如(后序):
function process(item)
{
text=""
foreach(child in children)
text=text+process(child)
return startTag(item)+text+endTag(item)
}
更好的解决方案是流式传输:
function process(item,stream)
{
startTag(item,stream)
foreach(child in children)
process(child,stream)
write endTag(item,stream)
}
这里 startTag 和 endTag 不返回字符串,而是尽快将其部分写入流。