XML形式ファイルの読み込みと生成

第0.43版 2016年10月23日
第0.13版 1999年 5月 4日

XML形式のファイルのパーズしてパースツリーを作成する機能と
その形式のパースツリーからXML形式のファイルを生成する機能の説明をします。
XML形式ファイルの生成機能はHTMLファイルの自動生成に利用することができます。

注:SJISしか解釈しない、DTDはコメントとしてしか扱わない、という点で
厳密にはXMLではありません。

list al_xml("parse", file, opt1, opt2);

XML形式ファイルfileをパーズします。
このパーサーは、空白/タブ/改行だけしか含まないテキスト要素は要素として数えません。
また、テキスト要素で頭から空白/タブ/改行以外の文字が現れるまでの空白/タブ/改行は
無視されます。

opt1がnulの場合は、パースツリーを作成して返します。
(parse_tree, error)のリストが返り、パーズに成功していればerrorは
nullになっています。パースツリーの構造は以下のようになっています。
パースツリーの構造

○ 基本構造
 <body> = (1)-/"!comment"/=>comment_text
             -/tag_id/=><tag>
             -/"!text"/=>text

 <tag> = (2)-/param_id/=>(param_value)
            -/"!body"/-><body>

○ ネームスペース
 tag_id-/namespace_prefix/->(namespace_url)
 param_id-/namespace_prefix/->(namespace_url)
opt1が以下の形式の場合は、格要素を読み込んだ時点でメソッドが呼ばれ、
パースツリーは作成されません。
opt1の構造および各要素を読み込んだときに呼ばれるメソッドの構造は以下のようになっています。
   opt1 = (obj, objFunc1, objFunc2, objFunc3, ...)
   objFunc1 = objのクラスのメンバー関数で list startElement(string tag_id, list params)
   objFunc2 = objのクラスのメンバー関数で list endElement(string tag_id)
   objFunc3 = objのクラスのメンバー関数で list characters(string text)
   params = (2)-/param_id/=>(param_value)

   objFunc1,2,3の戻り値が非nullの場合は、エラーみなしてパースが中断されます。
opt2がbit0が1のintegerの場合はパースツリーを生成する場合に
パーズの途中結果をアウトプットウィンドウに出力します。

list al_xml("generate", file, parse_tree, opt);

パースツリーparse_treeからファイルfileにXML形式ファイルを書き出します。

オプションoptには通常nullを入れます。成功するとnullが返ります。

optに flagがbit0が1のintegerの (flag, ...)-/tag_id/=>rep_end_tag を入れると </tag_id> を
文字列 rep_end_tag に置き換えます。
たとえば、()-/"LI"/->"" というアークが opt に含まれていると
</LI>は出力されません。
この機能をHTMLファイルの生成に用いることができます。

出力XMLは通常はAltairが適当にインデントや改行を入れて整形しますが、
optに bit1が1のintegerの(flag, ...)を入れるとインデントや改行を入れないXMLが生成されます。

list al_xml("xslt", xsl_parse_tree, xml_parse_tree, file);

xml_parse_treeで表されるXMLデータを xsl_parse_treeで表されるXSLで変換し、
結果をfileに出力します。