[1]
SerialWalker は、
manakai 独自の DOM 界面です。
DOM 木を文書順にたどることができますが、
子節点を訪問した後、もう一度親節点を訪問してから次の子節点へ向かいます。
[2] 例えば、
A
/ | \
B C D
/ \
E Fという木では、
[3] 節点と節点の間や子節点の後で作業が必要な時に便利です。 例えば、SAX の事象列を生成したり、 DOM 木を SXML に直列化したりするのに使うことができます。
[4] 作成:
TreeWalker と同じように、
DocumentTraversal
界面のメソッド
manakaiCreateSerialWalker から作成します。
引数も createTreeWalker と同じです。
my$doctrv = $doc->get_feature('Traversal');my$sw = $doctrv->manakai_create_serial_walker($root_node, $what_to_show, $filter, $expand_entity_references);
[5] 探索:
SerialWalker の唯一の探索メソッドは
nextNode です。
次の節点があれば、それを返します。なければ、
null を返します。
TreeWalker の探索メソッドと同じように、
このメソッドが null でない値を返した時は
currentNode, currentPhase,
currentIndex が更新されます。
## 節点名、フェーズ、索引番号を順に出力するwhile(defined$sw->next_node) {current_node->node_name, "\t", $sw->current_phase, "\t", $sw->current_index, "\n"; }
[6] 属性:
rootSerialWalker
を作成する時に指定した根節点です。
SerialWalker はこの節点を根とする部分木を歩き回ります。expandEntityReferenceSerialWalker
を作成する時に指定した、実体参照の見せ方の指定です。
取り得る値と意味は TreeWalker のものと同じです。whatToShowSerialWalker
を作成する時に指定した、見せる節点の種類です。
取り得る値と意味は TreeWalker のものと同じです。filterSerialWalker
を作成する時に指定した NodeFilter です。
取り得る値と意味は TreeWalker のものと同じです。currentNodenextNode が返した節点です。
TreeWalker とは異なり、
この属性は読取専用です。currentPhasecurrentPhase
のフェーズ番号です。
PRE_PHASE は、その節点に初めて訪問したことを示します。
子節点があれば、次にそれが訪問されます。
IN_PHASE は、その節点のある子節点を訪問し、
その次の子節点を訪問する前に一旦親節点を訪問していることを示します。
POST_PHASE は、その節点の子節点があればすべて訪問し終え、その節点に戻ってきたことを示します。
子節点がない (または見えない) 節点では、
PRE_PHASE の後すぐに
POST_PHASE で同じ節点を訪問します。currentIndexcurrentPhase が PRE_PHASE
なら、currentIndex は零です。
その後同じ節点に訪問する度に、値が1ずつ増えていきます。