2016-03-27 16 views
0

私はツールをコーディングしましたが、ツールの出力はtext形式です。例えば、ここでは印刷機能は次のとおりです。ここXML出力を作成する

(* in Shelf.ml *) 
let print (chan: out_channel) (x: t) : unit = 
    Printf.fprintf chan "Shelf:"; 
    List.iter (Book.print chan "%a\n") x 

(* in Book.ml *) 
let print (chan: out_channel) (x: t) : unit = 
    Printf.fprintf chan "Book: %s, %d, %s" x.name x.year x.abstract 

textとして出力例です:

Shelf: 
Book: LOTR, 1954, begin end 
Book: The Hobbit, 1937, nice book 

今、私はまた、出力XMLフォーマットすることを決定しました。そのメリットは、私の出力を入力として受け取る他のツールとのより良いコミュニケーションを得ることです。たとえば、出力をウェブページとして表示する必要があるかもしれません。またはいくつかのGUIが私の出力を受け取り、より良いレイアウトを作るかもしれません。次のように

XMLように、出力例が見えます:

<shelf> 
    <book name="LOTR"> 
     <year>1954</year> 
     <abstract>begin end</abstract> 
    </book> 
    <book name="The Hobbit"> 
     <year>1937</year> 
     <abstract>nice book</abstract> 
    </book> 
</shelf> 

私の質問は、私はXML出力のこの種を作るためにOCamlのプログラムを開発する方法、ありますか?たとえば、各モジュールに追加する必要がありますprint_xmlハードコードタグを文字列として使用しますか?

人はXmlmMarkupを指します。文字列タグをハードコーディングする代わりにこれらのモジュールを使用する必要がありますか?これらのモジュールを使用する利点は何ですか?

+0

どのように開発するかはあなた次第ですか?ここでコーディングの質問を見るのは難しいですが、ライブラリを使うべきかどうかを尋ねているようですが、それはOCamlに固有のものではありません。それはすべての言語の一般的なことです。 –

+0

質問は「ハードコーディングと比較して、これらの2つのモジュールを使用する利点は何ですか?」です。これらのモジュールを知っている人はあまり一般的でない質問を考えず、貢献するためにいくつかの正確な要素を持っています... – SoftTimur

+0

次に、主観的な答えが1つあります。私は両方を使用しました。マークアップは理解しやすく、使いやすくなっています。 –

答えて

0

あなたの構造が複雑ではなく、外部ライブラリの依存関係にすべてのコストをかけて頼りにしたくない場合は特にありません。

閉じ1.自動タグ

Printf.fprintf "<tagname>%s</tagname>" x 

しかし、最も簡単な場合には、ライブラリはあなたを与えるだろう(名前空間、スキーマなどに触れることなく、唯一のフォーマット関連)同様に

print_string "<foo>" 
... 
print_string "</foo>" 

は間違って見て、エラーが発生しやすいです。

out `El_start tag 
... 
out `El_end 

はそんなによりよい:)

また、あなたはおそらく

<tag/> 

代わりの

<tag></tag> 

2.かなりの

を印刷するための自動インデントをお勧めしますです

3.コンパクトでインデントされた出力

+0

ありがとうございます...「インデント」についてもう少し説明してください。私は自動インデントソリューションを探しています... 'Markup'のドキュメントにはいくつかの例があります... – SoftTimur

+1

私は' Markup'を個人的に使用していません。しかし 'Xmlm'では、' Some x'を 'make_output'関数にラベル付けされた引数' indent'として渡すだけです(デフォルトは 'None'つまり字下げはありません)。[the link](http:// erratique .ch/software/xmlm/doc/Xmlm.html#outindent)。 –

+0

@SoftTimurそれは遅れていますが、Markup.mlの自動字下げの場合は、 'pretty_print'を通してシグナルを渡してください。したがって、たとえば'signals |> pretty_print |> to_string'となります。将来のユーザーを参考にして、いくつかの例を挙げておきます。 – antron

関連する問題