0

例如

树:

    A
A1     A2

序列化为 xml:

<A> <A1> </A1> <A2> </A2> </A>

似乎根优先遍历(前序)或根最后遍历(后序)都不足以实现这一点。

这样做的好方法是什么?

4

1 回答 1

1

答案主要取决于您如何定义“好”。

无论是预购还是后购都不是很好。严格应用时,它们要求在处理子项之前/之后对根进行完全处理。在这种解释中,两者都要求您在内存中构建字符串,例如(后序):

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 不返回字符串,而是尽快将其部分写入流。

于 2012-11-01T01:42:14.720 回答