XML活用講座

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ファイルを準備しました。

xml0006_sample_DOCX2XML_doc

 

このサンプルでは、次のとおり、各段落に「段落スタイル」を設定してあります。

 

xml0006_word_style

 

XML構造の定義

XML自体は、要素名・属性・順序・階層の深さなどに制限がありません。しかし、書き手が自由に文書を書くと、文章が項目立った内容にならないため読みにくく、また、プログラムでXMLをHTMLやPDFに変換するときにも、内容がバラバラだと処理できません。
そこで、DTD(文書型定義)ファイルと呼ばれる、XMLの構造を定義するファイルも準備しました。
DTDとは、文章を「章・節・項・目」のように階層化して要素名を決めたルールブックに該当するファイルです。
DTD自体はテキストファイルで内容が読みにくいため、可視化したイメージをお見せしましょう。

xml0006_sample_dtd

 

Wordの段落スタイルとDTDの関連付け

今回のサンプルで、Wordの段落スタイルとDTDを関連付けると、次のようなイメージになります。

xml0006_dtd_style-mapping

 

変換後のXML

上記の「Wordファイル」、「DTD」を準備し、変換に使用するソフトウエアに「Wordの段落スタイルとDTDの関連付け」を設定した状態で、WordファイルをXMLに変換すると、次のようになります。

xml0006_sample_DOCX2XML_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

上記のスクリプトは次のリンクからダウンロードできます。

word2xml.vbs

 

このスクリプトは、Wordの別名保存の機能を使ってMicrosoft Word仕様のXMLファイルを保存し直すだけなので前述の階層構造のXMLになりません。
しかし、Wordファイルという「バイナリデータ」のデータ形式からXMLファイルという「メタデータ」のデータ形式に変換できるため、プログラム処理を開発することによって階層構造のXMLに変換できます。

 

!Note
ご利用結果について、当社は一切の責任を負いません。

 



ページTOPへ