例えば
木:
A
A1 A2
xmlにシリアル化します:
<A> <A1> </A1> <A2> </A2> </A>
ルートファーストトラバーサル(プレオーダー)またはルートラストトラバーサル(ポストオーダー)のいずれかでは、これを達成するのに十分ではないようです。
これを行うための良い方法は何ですか?
例えば
木:
A
A1 A2
xmlにシリアル化します:
<A> <A1> </A1> <A2> </A2> </A>
ルートファーストトラバーサル(プレオーダー)またはルートラストトラバーサル(ポストオーダー)のいずれかでは、これを達成するのに十分ではないようです。
これを行うための良い方法は何ですか?
答えは主に、「良い」をどのように定義するかに依存します。
事前注文も事後注文も本当に良いものではありません。厳密に適用する場合、子が処理される前/後にルートが完全に処理される必要があります。この解釈では、どちらもメモリ内に文字列を作成する必要があります。例:(postorder):
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は文字列を返しませんが、その部分をできるだけ早くストリームに書き込みます。