Построение графика структуры документа XML
Я хотел бы построить график, показывающий, какие теги используются в качестве дочерних по отношению к другим тегам в данном документе XML.
Я написал эту функцию, чтобы получить уникальный набор дочерних тегов для данного тега в дереве lxml.etree:
def iter_unique_child_tags(root, tag):
"""Iterates through unique child tags for all instances of tag.
Iteration starts at `root`.
"""
found_child_tags = set()
instances = root.iterdescendants(tag)
from itertools import chain
child_nodes = chain.from_iterable(i.getchildren() for i in instances)
child_tags = (n.tag for n in child_nodes)
for t in child_tags:
if t not in found_child_tags:
found_child_tags.add(t)
yield t
Есть ли универсальный построитель графиков, который я мог бы использовать с этой функцией для построения точечного файла или графика в каком-либо другом формате?
У меня также появляется подозрение, что где-то есть инструмент, специально разработанный для этой цели; что это может быть?
1 ответ
Я закончил тем, что использовал python-graph. Я также использовал argparse для создания интерфейса командной строки, который извлекает некоторые основные биты информации из документов XML и создает изображения графиков в форматах, поддерживаемых pydot. Он называется xmlearn и полезен:
usage: xmlearn [-h] [-i INFILE] [-p PATH] {graph,dump,tags} ...
optional arguments:
-h, --help show this help message and exit
-i INFILE, --infile INFILE
The XML file to learn about. Defaults to stdin.
-p PATH, --path PATH An XPath to be applied to various actions.
Defaults to the root node.
subcommands:
{graph,dump,tags}
dump Dump xml data according to a set of rules.
tags Show information about tags.
graph Build a graph from the XML tags relationships.