カタログをダウンロードしましたが、XML形式です。コードから人間が読める形式に変更し、理想的にはプレーンテキストファイルとして保存するにはどうすればよいですか?私はこれまで働いたことも見たこともありません。 xslprocをいじってみましたが、多少似ていることがここで推奨されていましたが、機能しませんでした。私はそれをtextWranglerに正常にロードし、XMLで正しくフォーマット(インデント/色/その他)しましたが、実際に「実行」して内容を印刷する方法がわかりません。 Excel、Word、メモ帳も試してみたところ、エラーになってしまいました。
それが明確でなければ、私はこのようなものを持っています:
<TD>51.9029244701</TD>
<TD>47.0082067303</TD>
そして私はそれをこのようにしたいです:
51.9029244701
47.0082067303
このカタログの情報をテキストファイルにしたい。
ここで遅い答え:Ubuntuリポジトリにはxmlto
と呼ばれる非常に優れたユーティリティがあり、あなたを助けることができます。 xmlをプレーンテキスト、epub、pdfなどのさまざまな形式に変換します。
オンラインには、多くの変換オプションがある Oxgarage があります。
非常に単純な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
。それは本当に初歩的なものなので、あなたが正確に探しているものではないかもしれませんが、それは何かです!
これを試して:
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ファイル内のすべてのノードのコンテンツが出力されます。
これはあなたが実際に考えるよりも簡単です-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;
これは「人間が読める」のかなり良い近似です。