Построение графика структуры документа XML - PullRequest
4 голосов
/ 18 июля 2010

Я хотел бы построить график, показывающий, какие теги используются в качестве дочерних для каких других тегов в данном документе 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 Ответ

1 голос
/ 19 июля 2010

Я использовал 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.
...