如何揭示复杂XML的结构



我有一个包含大量嵌套标记的大XML文件。我想知道这个XML的结构。比如层次树图像,或者其他格式。应该使用什么工具?

多年前,我在xsh中写过:

open { $ARGV[0] } ;
my $count ;
def processNonRec $type $parent $node {
my $name = $type ;
perl { $name .= $count->{"*$type"}++ } ;
echo :s '"' $parent '"' " -> " '"' $name '"' ;
echo :s '"' $name '" [label="' $type '()"]' ;
}
def processNode $parent $node {
my $label = name($node);
my $name ;
perl { $name = $label . "=" . $count->{$label}++ } ;
echo :s '"' $parent '"' " -> " '"' $name '"' ;
if $node/self::* {
if (count($node/../*[name() = $label]) > 1) {
my $num = count($node/preceding-sibling::*[name() = $label]) ;
$label = concat($label, "[", $num + 1, "]") ;
}
} else {
$label = concat("@", $label) ;
}
echo :s '"' $name '" [label="' $label '"]' ;
for ($node/node() | $node/@*) {
if self::*                         processNode $name (.) ;
if (count(.|../@*) = count(../@*)) processNode $name (.) ;
if self::text()                    processNonRec 'text'    $name (.) ;
if self::comment()                 processNonRec 'comment' $name (.) ;
if self::processing-instruction()  processNonRec 'pi'      $name (.) ;
}
}
echo 'strict digraph' name() '{' ;
echo 'node [shape=box]' ;
processNode "document" /* ;
echo '}' ;

输出Graphviz用来绘制图形的.dot文件。

最新更新