外部XMLファイルにDTD宣言がある場合

「変換(XML→抽出データ)」手順は、外部XMLデータ(xoBlos 以外の他システムからのXMLデータ)を、xoBlos 用XMLデータに変換する手順です。
[新しい手順] メニューからは、[抽出データを作成する]-[XMLファイルから] で作成される手順です。

「変換(XML→抽出データ)」手順は、外部XMLデータを xoBlos 用XMLに、構造のフラット化を行い、文字コードエンコーディング)の変換もやってくれる便利なツールですが、留意事項がありますので解説します。

XMLデータの冒頭に、DTD(Document Type Definition)の宣言がある場合があります。
例えば次の例では XHTML ファイルのサンプルですが、2行目にDTD宣言があります。

input.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <title>XHTML sample</title>
  </head>
  <body>
    <p>XHTML のサンプルファイルです。</p>
  </body>
</html>

このようなファイルを入力ファイルにした場合、「変換(XML→抽出データ)」手順では実行時にエラーになります(製品仕様)。

このため、事前にWindowsfindstr コマンドなどを使用し、DTD宣言行を抜き取っておいてから入力します。

findstr コマンドの例

findstr /V "\/\/DTD" input.xhtml > work.xml

findstr コマンドは、ファイルから指定した文字列を検索してくれますが、/V オプションを付けると、一致しない行のみを出力します。

リダイレクト出力した work.xml ではDTD宣言行がとれ、このファイルを入力ファイルとして「変換(XML→抽出データ)」手順にかけると、出力したファイルはxoBlos XML形式になります。

f:id:xoblos:20211228122150p:plain

XOB.xml

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <ROWS>
    <html />
    <head />
    <title>XHTML sample</title>
  </ROWS>
  <ROWS>
    <html />
    <body />
    <p>XHTML のサンプルファイルです。</p>
  </ROWS>
</Root>

xoBlos 業務定義手順への findstr コマンド の組み込みは、下記の記事を参考にしてください(/V オプションをお忘れなく)。

Designer:「外部アプリの実行」の定番設定方法 https://xoblos.hatenablog.jp/entry/2021/12/26/142128