Visualizar a estrutura da árvore XML

tenho vários ficheiros XML que têm uma estrutura semelhante, mas com algumas diferenças que não posso ignorar. São todos documentos TEI.

Estou à procura de uma forma de delinear a estrutura principal.

Tome como exemplo o seguinte texto:

<text xmlns="http://www.tei-c.org/ns/1.0" xml:id="d1">
<body xml:id="d2">
<div1 type="book" xml:id="d3">
<head>Songs of Innocence</head>
<pb n="4"/>
<div2 type="poem" xml:id="d4">
<head>Introduction</head>
<lg type="stanza">
<l>Piping down the valleys wild, </l>
<l>Piping songs of pleasant glee, </l>
<l>On a cloud I saw a child, </l>
<l>And he laughing said to me: </l>
</lg>

Eu gostaria de suprimir os nós do mesmo tipo e todas as estruturas repetitivas:

<body xml:id="d2">
<div1 type="book" xml:id="d3">
<head>Songs of Innocence</head>
<pb n="4"/>
<div2 type="poem" xml:id="d4">
<head>Introduction</head>
<lg type="stanza">
<l>...</l>
</lg>
<lg>...</lg>
Então, basicamente eu quero reduzir o documento XML para sua estrutura mais básica. Desta forma eu pode descobrir como convertê-los corretamente usando XSLT.

Author: kjhughes, 2016-02-26

2 answers

Aqui estão algumas opções para ver o seu XML numa estrutura de árvore:

  1. Abra o XML num navegador web e obtenha uma visão geral com elementos desmontáveis.
  2. Abra o XML na área gráfica em oxigénio, QTAssistant, ou XMLSpy .
  3. Use Graphviz ou DotML ant build para criar o seu próprio representacao.
Note, No entanto, que terá de limpar a sua margem. O que você mostra não se qualifica como XML como está faltando tags finais e falta um único elemento de raiz. (O XML tem de ser bem formadas.)
 0
Author: kjhughes, 2017-05-23 11:45:02

Usando o perl XML::: DT, (apt-get install libxml-dt-perl Se não estiver instalado), o comando mkxmltype file.xml devolve uma descrição compacta do estrutura xml. Exemplo

$ mkxmltype -lines=1000  a.xml 

# text ...Fri Feb 26 17:56:24 2016
text    =>  body * xml:id
body    =>  div1 * xml:id
div1    =>  tup(div2, pb, head) * type * xml:id
div2    =>  tup(head, lg) * type * xml:id
pb  =>  empty * n
head    =>  text
lg  =>  seq(l) * type
l   =>  text
 0
Author: JJoao, 2016-02-26 17:58:35