web-dev-qa-db-ja.com

実際にXMLファイルを人間の形で実際に読み取るにはどうすればよいですか?

カタログをダウンロードしましたが、XML形式です。コードから人間が読める形式に変更し、理想的にはプレーンテキストファイルとして保存するにはどうすればよいですか?私はこれまで働いたことも見たこともありません。 xslprocをいじってみましたが、多少似ていることがここで推奨されていましたが、機能しませんでした。私はそれをtextWranglerに正常にロードし、XMLで正しくフォーマット(インデント/色/その他)しましたが、実際に「実行」して内容を印刷する方法がわかりません。 Excel、Word、メモ帳も試してみたところ、エラーになってしまいました。

それが明確でなければ、私はこのようなものを持っています:

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

そして私はそれをこのようにしたいです:

51.9029244701
47.0082067303

このカタログの情報をテキストファイルにしたい。

5
deedsy

ここで遅い答え:Ubuntuリポジトリにはxmltoと呼ばれる非常に優れたユーティリティがあり、あなたを助けることができます。 xmlをプレーンテキスト、epub、pdfなどのさまざまな形式に変換します。

オンラインには、多くの変換オプションがある Oxgarage があります。

3
Paulb

非常に単純なPythonスクリプトを記述して、xmlファイルを読み取り、その内容を別のファイルに出力します。

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

これをreadxml.pyとして保存し、シェルから次のように呼び出します:$ python readxml.py input.xml output.txt。それは本当に初歩的なものなので、あなたが正確に探しているものではないかもしれませんが、それは何かです!

2
KidElephant

これを試して:

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

出力は次のようになります。

51.9029244701
47.0082067303

grep select xml [〜#〜] td [〜#〜]タグ、awk use [〜#〜] td [〜#〜]をセパレーターとして削除し、>および</から$2フィールド。

すべてのノードを選択するには、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>

これにより、xmlファイル内のすべてのノードのコンテンツが出力されます。

2
Lety

これはあなたが実際に考えるよりも簡単です-XML要素には4つの「もの」、つまり名前、属性、子、および「コンテンツ」があります。

したがって、すべてのコンテンツ要素を繰り返して、それらを印刷することができます(ラインフィードの有無にかかわらず)

#!/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('//*');

これは、すべての「コンテンツ」(pcdata)ノードを探し出し、それらを1行に1つずつ出力します。

しかし、実際には、XMLに関して言えば、「人間が読める」ということが重要です。それをきれいに印刷してそのままにしておかないと、人間がそれを読むことができるようになります。

必要に応じて再フォーマットできます。

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

これは「人間が読める」のかなり良い近似です。

1
Sobrique