XMLファイルの意味のある人間の形式を実際にどのように読みますか?

XMLファイルの意味のある人間の形式を実際にどのように読みますか?

ディレクトリをダウンロードしましたが、ディレクトリはXML形式です。コードから人間が読める形式にどのように変更し、可能であればプレーンテキストファイルとして保存しますか?私は以前これを働いたり見たことがありません。同様のことをするためにここで推奨されているxslprocを試しましたが、うまくいきませんでした。 XML(インデント/カラー/など)で正しくフォーマットされたtextWranglerに正常にロードしましたが、内容を印刷するために実際に「実行」する方法がわかりません。 Excel、Word、メモ帳も試してみましたが、最終的にエラーが発生しました。

まだ明確でない場合は、次のようなものがあります。

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

私は次のようなものが欲しい:

51.9029244701
47.0082067303

このディレクトリの情報を含むテキストファイルを作成したいと思います。

答え1

ここに遅い答えがあります:Ubuntuリポジトリには役立つxmlto非常に素晴らしいユーティリティがあります。 xmlをプレーンテキスト、epub、pdfを含む複数の形式に変換します。

利用可能なオンラインオークガレージその中には多くの変換オプションがあります。

答え2

私はxmlファイルを読み、その内容を別のファイルに出力する非常に単純なPythonスクリプトを書いています。

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。本当に初歩的な内容なので欲しいものではないかもしれませんが、何か重要な内容です!

答え3

この試み:

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

出力は次のとおりです。

51.9029244701
47.0082067303

grepSelectXMLTD表示する、awk使用する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ファイル内のすべてのノードの内容が出力されます。

答え4

実際に思ったより簡単です。 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;

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

関連情報