InfoPathでXMLデータを編集したら便利かもしれない

昔のExcelXMLデータを手軽に扱えてよかったのに、最近のバージョンったらアレだ。
 
jQueryAjaxXMLデータを読み込む仕掛けは大好きだ。XMLデータファイルの編集はExcelテキストエディタとかユーザーに技量を求められるのがイラッとくる。そこでInfoPathに着目してみたが使い方がサッパリわからんなかでの試行錯誤の結果です。

普段のXMLファイルを用意する。

エクセルのアドオンとか使って出力するとこんな感じの構造になっている。このXMLファイル「hoge.xml」をファイルサーバに置く。(ローカルだと後半で失敗する)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Row>
  <title>hoge</title>
  <memo>hogeeeee</memo>
 </Row>
 <Row>
  <title>fuga</title>
  <memo>aho</memo>
 </Row>
</Root>

InfoPath Designer2010を起動する

InfoPath Fillerではない。
新規作成>利用可能なフォームテンプレート「XMLまたはスキーマ
「データソースウィザード」ウィンドウが開く

  1. 「データソースとして使用するXMLドキュメントまたは市キーマの場所を入力してください」:ファイルサーバに用意したXMLファイルを指定する
  2. 「メインデータソースの別のXMLスキーマまたはXMLドキュメントを追加しますか?」:いいえ
  3. 「選択されたxmlファイルの構造が、作成するフォームテンプレートの・・・」:はい(重要)

ウィザードが完了する。

フォーム画面作成

ウィンドウの右側に「フィールド」が現れる。フォルダアイコンのようなトップディレクトリの「Root」をマウスで摘んでペッとする。プレビューで確認しながら配置を考える。
フォームの操作性は悪いので、「メニューバー>挿入>ユーザー設定の表」をバシバシ使うことを勧めるけど、デザインなんて後回し。理由は失敗したときにショックが大きいから。
XMLと同じファイルサーバに「ほげ.xsn」保存する。
 

発行

「ファイル>発行>ネットワークの場所」
「発行ウィザード」ウィンドウが開く

  1. 「フォームテンプレートのパスとファイル名」にXMLと同じファイルサーバを指定、あたらしいファイル名「ほげ_filler.xsn」を命名する
  2. 「間のステップで入力した場所にフォームのすべてのユーザーがアクセス出来る場合・・・」参照できることね。
  3. 発行!

初回だけの起動

「ほげ_filler.xsn」をダブルクリックで起動するとセキュリティ通知がでるけどOKすると入力フォームが開く。何も編集しない。
「名前をつけて保存」で元のXMLと同じファイルサーバに「hoge_filler.xml」とかで保存する。

データ編集

hoge_filler.xml」のアイコンがInfoPathになっているのでダブルクリックする。XMLファイルなのにInfoPathFillerが起動する。
「項目の挿入」とか「Rowの削除」とかで追加削除を行う。

作成したXMLファイルを見る

ヘッダ(って言い切っていいのか?)の中にfillerファイルの記述があるところがミソっぽい。

<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///\\share\xml\hoge_filler.xsn" name="urn:schemas-microsoft-com:office:infopath:kB-filler:" ?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.3"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-01-09T05:34:26" xml:lang="ja">
 <Row>
  <title>hoge</title>
  <memo>hogeeeee</memo>
 </Row>
 <Row>
  <title>fuga</title>
  <memo>aho</memo>
 </Row>
</Root>

Webで公開するときはヘッダ部分を編集しないと格好悪くなりそう