WordからXMLに変換する
概要
前々回では「XMLの記述ルール」を説明しましたが、実際はXMLをエディターで手入力するケースは少なく、多くの場合、プログラムでXMLを出力したり、何らかの元データがあって、それらをXMLに変換する方法が効率的です。
ここでは、Wordファイルを元データとして変換する方法をご紹介します。
Microsoft Wordファイルからの変換
メリット
当社で手掛けている「取扱説明書」などの文書を変換する場合は、元データをWordファイルで準備する方法が、直感的、かつ効率的に作業を進めることができます。
特に、表をエディターを使って手入力で作成することは難しく、罫線情報(太さ・線種・色)やセル単位の結合などを考えると至難の業です。一方、Wordであれば直感的に表を作成できるため、そのデータを変換することがXML文章を作成する点においても、相性の良い手法といえます。
デメリット
現在、WordをXMLに変換するソフトウエアは、Excel(CSV)をXMLに変換するソフトウエアより圧倒的に少ない状況です。また、コンテンツの内容がExcel(CSV)に比べて複雑になるため、処理するソフトウエアも高度なものになります。
そのため、Excel(CSV)を変換するソフトウエアと比べて条件や制約が多く、また、高価なものとなる傾向があります。
当社での実績
当社では、XMLへの取り組みを始めたころは、「XMLに対する取り組み」のページで記載しているとおり、『XML ASSIST』という富士電機総設株式会社製のソフトウエアを使って、Wordのリッチテキストファイル(*.rtf)をXMLに変換していました。
現在は、自社で開発した独自のアプリケーションを使ってWord(*.docx)をXMLに変換していますが、基本的な考え方としては、段落スタイル名などを読み取って階層構造を持ったXMLファイルに変換しています。
サンプル
Wordファイル
今回、サンプルとして次のようなWordファイルを準備しました。
このサンプルでは、次のとおり、各段落に「段落スタイル」を設定してあります。
XML構造の定義
XML自体は、要素名・属性・順序・階層の深さなどに制限がありません。しかし、書き手が自由に文書を書くと、文章が項目立った内容にならないため読みにくく、また、プログラムでXMLをHTMLやPDFに変換するときにも、内容がバラバラだと処理できません。
そこで、DTD(文書型定義)ファイルと呼ばれる、XMLの構造を定義するファイルも準備しました。
DTDとは、文章を「章・節・項・目」のように階層化して要素名を決めたルールブックに該当するファイルです。
DTD自体はテキストファイルで内容が読みにくいため、可視化したイメージをお見せしましょう。
Wordの段落スタイルとDTDの関連付け
今回のサンプルで、Wordの段落スタイルとDTDを関連付けると、次のようなイメージになります。
変換後のXML
上記の「Wordファイル」、「DTD」を準備し、変換に使用するソフトウエアに「Wordの段落スタイルとDTDの関連付け」を設定した状態で、WordファイルをXMLに変換すると、次のようになります。
まとめ
このように、WordファイルをXMLに変換する場合の一例として、Wordの段落スタイルの情報を利用して「章・節・項」のような階層構造を持ったXMLファイルに変換する方法を参考にしていただけたらと思います。
Word2XMLスクリプトのサンプル
簡単なVBスクリプトのサンプルは、以下のとおりです。
メモ帳などのエディターにソースコードをコピーして、「word2xml.vbs」などのファイル名で保存します。
このScriptファイルの16行目・19行目には「11」という値を設定しています。これはMicrosoft Word のXML保存形式「wdFormatXML」を指定しています。
このScriptファイルにWordファイルをドラッグ・アンド・ドロップすると、変換処理が行われます。
If wscript.arguments.count > 0 Then If CreateObject("Scripting.FileSystemObject").FileExists ( wscript.arguments.item(0) ) = True Then Call main ( wscript.arguments.item(0) ) End If End If Sub main(file) Dim oWord, oDoc Dim sExt Set oWord = CreateObject("Word.Application") oWord.Visible = FALSE oWord.Application.DisplayAlerts = FALSE oWord.DisplayAlerts = FALSE sExt = LCase(MID(file, InStrRev(file, ".") + 1)) If sExt = "docx" Then Set oDoc = oWord.Documents.OpenNoRepairDialog(file) oWord.ActiveDocument.SaveAs file & ".xml", 11 ElseIf sExt = "doc" Then Set oDoc = oWord.Documents.OpenNoRepairDialog(file) oWord.ActiveDocument.SaveAs file & ".xml", 11 End If oDoc.Close Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub
上記のスクリプトは次のリンクからダウンロードできます。
このスクリプトは、Wordの別名保存の機能を使ってMicrosoft Word仕様のXMLファイルを保存し直すだけなので前述の階層構造のXMLになりません。
しかし、Wordファイルという「バイナリデータ」のデータ形式からXMLファイルという「メタデータ」のデータ形式に変換できるため、プログラム処理を開発することによって階層構造のXMLに変換できます。
!Note |
---|
ご利用結果について、当社は一切の責任を負いません。 |