Como eu realmente leio um arquivo XML em forma humana que faz sentido?

4

Eu baixei um catálogo e está no formato XML. Como mudá-lo do código para o formato legível e, idealmente, salvá-lo como um arquivo de texto simples? Eu nunca trabalhei / vi isso antes; Eu tentei mexer com xslproc como foi recomendado aqui para coisas um pouco semelhantes, mas não consegui fazê-lo funcionar. Eu carreguei com sucesso em textWrangler, que formata corretamente (recuos / cores / etc) em XML, mas eu não vejo como posso realmente 'executá-lo' para imprimir seu conteúdo. Eu também tentei o Excel, Word, Notepad e acabei com erros.

Se isso não estava claro, eu tenho coisas assim:

      <TD>51.9029244701</TD>
      <TD>47.0082067303</TD>

e eu quero assim:

51.9029244701
47.0082067303

Eu quero criar um arquivo de texto com as informações deste catálogo.

    
por deedsy 01.08.2014 / 20:24

4 respostas

2

Resposta tardia aqui: O repositório do Ubuntu tem um utilitário muito bom chamado xmlto que pode ajudá-lo. Ele converte xml em vários formatos, incluindo texto simples, epub, pdf.

On-line, há Oxgarage que tem muitas opções de conversão.

    
por 20.08.2015 / 02:38
1

Eu escrevi um script Python muito simples que leria em um arquivo xml e enviava seu conteúdo para outro arquivo:

import sys
inFile = open(sys.argv[1], 'r')
outFile = open(sys.argv[2], 'w')    
read = True
for i in inFile.read():
    if i == '<':
        read = not read
    if read:
        outFile.write(i)
    if i == '>':
        read = not read

Salve isso como readxml.py e, em seguida, chame-o do shell da seguinte forma: $ python readxml.py input.xml output.txt . É realmente rudimentar, então pode não ser exatamente o que você está procurando, mas é alguma coisa!

    
por 01.08.2014 / 20:42
1

Tente isto:

grep "<TD>" yourfile.xml | awk -F "TD" '{gsub(">|</","",$0); print $2;}'

a saída será:

51.9029244701
47.0082067303

grep selecione xml tag TD , awk use TD como separador e remova > e </ do campo $2 .

Para selecionar todo o nó, tente a transformação xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text" indent="yes"/>
   <xsl:template match="node()">
      <xsl:value-of select="." />
   </xsl:template>
</xsl:stylesheet>

Isto irá mostrar o conteúdo de todos os nós no seu arquivo xml.

    
por 01.08.2014 / 23:59
0

Isso é mais fácil do que você pensa - elementos XML têm 4 'coisas' - um nome, atributos, filhos e 'conteúdo'.

Assim, você pode iterar todos os elementos de conteúdo e apenas imprimi-los (com ou sem um avanço de linha)

#!/usr/env/perl

use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig -> parsefile ( 'your_file');
print $_ -> text."\n" for grep { $_ -> is_pcdata } $twig -> get_xpath('//*');

Isso detecta todos os nós de 'conteúdo' ( pcdata ) e os imprime - um por linha.

Mas, na verdade, quando se trata de XML, "legível por humanos" é uma questão importante. Por que não apenas imprimi-lo e deixá-lo assim, então a leitura humana pode ... bem, lê-lo e não perder os dados no processo.

Você pode reformatá-lo se quiser:

$twig -> set_pretty_print ('indented_a'); 
$twig -> print;

Qual é uma boa aproximação de 'legível por humanos'.

    
por 03.01.2016 / 00:40