属性付き外部XMLデータの例 input.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <Dataset> <Record> <レストラン名 Star="☆☆">与一衛門</レストラン名> <場所>銀座</場所> </Record> <Record> <レストラン名 Star="☆☆☆">画竜点睛</レストラン名> <場所>赤坂</場所> </Record> <Record> <レストラン名 Star="☆☆☆">三なすび</レストラン名> <場所>麻布</場所> </Record> <Record> <レストラン名 Star="☆☆">アディオス・アミーゴ</レストラン名> <場所>恵比寿</場所> </Record> <Record> <レストラン名 Star="☆☆☆">ムーングロウ</レストラン名> <場所>中目黒</場所> </Record> </Dataset>
属性をタグ(項目名)に変換する設定
[新しい手順]-[コピー/削除/その他]-[XMLを任意の形式に変換] メニューから「変換(XSLTで)」手順を作成し、ファイル名を設定します。
入力ファイル名 input.xml
出力ファイル名 work.xml
属性変換.xml の内容
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="@*|node()"> <xsl:if test="name()='レストラン名'"> <Star><xsl:value-of select="@Star"/></Star> </xsl:if> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
XSLT変換後の出力結果 work.xml
xoBlos 用にXMLデータをフラット化する
[新しい手順]-[抽出データを作成する]-[XMLファイルから] メニューから「変換(XML→抽出データ)」手順を作成し、ファイル名を設定します。
入力ファイル名 work.xml
出力ファイル名 output.xml
xoBlos 用のフラットなXMLに変換されます。
ルート要素に属性があるXMLデータのケース
ここまでの例で説明した 属性変換.xml では、ルート要素に指定された属性を変換しようとするとうまくいきません。
出典:e-Govポータル(https://www.e-gov.go.jp)
上図のように、e-Gov 法令XMLデータには、ルート要素 Law に属性が付いています。
例えばこの法令XMLから、属性 Year、Era をタグ(項目名)に変換したい場合、Law をラップした TOP というルート要素を作り、その下に属性を出力すれば良さそうです。
サンプルXSLTスタイルシートファイルの内容を次に載せます。
属性変換2.xml
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <xsl:template match="/"> <TOP><xsl:apply-templates/></TOP> </xsl:template> <xsl:template match="@*|node()"> <xsl:if test="name()='Law'"> <Year><xsl:value-of select="@Year"/></Year> <Era><xsl:value-of select="@Era"/></Era> </xsl:if> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>