[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] 属性:
root
SerialWalker
を作成する時に指定した根節点です。
SerialWalker
はこの節点を根とする部分木を歩き回ります。expandEntityReference
SerialWalker
を作成する時に指定した、実体参照の見せ方の指定です。
取り得る値と意味は TreeWalker
のものと同じです。whatToShow
SerialWalker
を作成する時に指定した、見せる節点の種類です。
取り得る値と意味は TreeWalker
のものと同じです。filter
SerialWalker
を作成する時に指定した NodeFilter
です。
取り得る値と意味は TreeWalker
のものと同じです。currentNode
nextNode
が返した節点です。
TreeWalker
とは異なり、
この属性は読取専用です。currentPhase
currentPhase
のフェーズ番号です。
PRE_PHASE
は、その節点に初めて訪問したことを示します。
子節点があれば、次にそれが訪問されます。
IN_PHASE
は、その節点のある子節点を訪問し、
その次の子節点を訪問する前に一旦親節点を訪問していることを示します。
POST_PHASE
は、その節点の子節点があればすべて訪問し終え、その節点に戻ってきたことを示します。
子節点がない (または見えない) 節点では、
PRE_PHASE
の後すぐに
POST_PHASE
で同じ節点を訪問します。currentIndex
currentPhase
が PRE_PHASE
なら、currentIndex
は零です。
その後同じ節点に訪問する度に、値が1ずつ増えていきます。