DTDのツリー表示

drambuie2004-12-02

DTDを見ていたら、結局、この要素の下には何が書けるの?と分からなくなってきたので、ツリー構造を表示するようにしてみた。PEARXML_DTDを使ったら、簡単だった。

<?php
/**
 * DTDの読み込みと表示
 */

/** PEAR の XML_DTD */
include 'XML/DTD.php';

$dtd = 'XXXXXXXX.dtd';
$parser = new XML_DTD_Parser;
$dtdobj = $parser->parse($dtd);

// <root>から表示
print_tree('root', 0);

/**
 * XML_DTD_Treeの表示
 * @param string $target 表示するDTDのELEMENT名
 */
function print_tree($target, $indent)
{
	global $dtdobj;
	
	$children = $dtdobj->getChildren($target);
	
	// タブでインデント
	for ($i = 0; $i < $indent; $i++)
	{
		echo "\t";
	}
	
	echo "$target\n";
	
	if ($target == 'XXXX')
	{
		// 無限に入れ子になってしまうELEMENTはここではじく。
		return;
	}
	
	foreach ($children as $child)
	{
		print_tree($child, $indent + 1);
	}
}
?>