我已经搜索过并且正在寻找一种在处理XML文件时有用的工具。 我必须理解不同的XML结构,当我必须在纸上绘制所有内容或自己模拟图表时,它会变得非常烦人。
我想知道是否有人提供某些工具可以帮助我们找出XML结构?
对于任何不明白我为什么需要这个的人,想象一下:
<parent id="1">
<name> ... </name>
</parent>
<parent id="2">
<name> ... </name>
</parent>
<child mother="1" father="2"></child>
在这种情况下,母亲和父亲在父元素中由id设置。
有时我有一个巨大的结构,以这种方式与其他节点连接(使用ID或一些字符串识别器)。手动处理这个很糟糕,我想知道是否有一些从XML中绘制图表的自动方式(输入最少)。
谢谢
答案 0 :(得分:2)
我知道你要求一个工具,并且你用UML标记你的问题,但也许你会喜欢Perl的Graph::Easy模块,只是为了获得你的XML的第一个大视图。
以下是XML示例:
<test>
<parent id="1"/>
<parent id="2"/>
<child id="11" mother="1" father="2"/>
<child id="10" mother="1" father="2"/>
</test>
这是小脚本:
#!/usr/bin/perl -w
use 5.010;
use strict;
use warnings;
use Graph::Easy;
use IO::All;
use Path::Class;
use XML::LibXML;
my $graph = Graph::Easy->new(timeout => 100);
my $parser = XML::LibXML->new();
my $xmlFile = file('...') # Replace by your path.
my $dom = $parser->parse_file($xmlFile);
foreach my $childNode ($dom->findnodes('//child'))
{
$graph->add_edge
(
$childNode->getAttribute('id'),
$childNode->getAttribute('mother'),
'has mother'
);
$graph->add_edge
(
$childNode->getAttribute('id'),
$childNode->getAttribute('father'),
'has father'
);
}
$graph->as_svg > io("graph.svg");
结果:
这只是一个非常简单的例子,但您可以轻松地进一步添加不同类型的线条,颜色等。例如:
答案 1 :(得分:1)
也许你使用的是错误的工具? XML最适合识别存储为自上而下树结构的数据。您描述的结构具有更复杂的关系(父级可能在某些情况下是顶级元素,在其他情况下是低级元素)...关系数据库(例如,基于SQL)在描述时会更好。