LoginSignup
2
3

More than 3 years have passed since last update.

XSLT でxmlからxml作成 条件分岐の方法

Last updated at Posted at 2019-02-09

経緯

XSLT という普段お目にかからないものを使った業務を行っていたので備忘録を兼ねてまとめていきます。
調べれていけば見つかる情報も多いですが何より自分がひと眼で見られる情報がほしかったので・・・

xmlファイルからxmlを作るなんて機会があった人の役にも立てればいいかな・・・

基本

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
 <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <!-- ここに内容を記述 -->
    </xsl:template>
</xsl:stylesheet>

上記の内容で内容を記述となっている個所に出力したいxmlファイルを作成していく形となる。
元のファイルから取得したい値などを新しいファイルに移すことになります。
プログラムで一からファイルを作るのが面倒な場合や
ファイルが複雑な時に使えるかと。

条件分岐

出力するときの条件分岐の方法をまずは記載
開発をしている中で一番多く書いた気がするのでまずは一番目に持ってきました。
XSLTはあくまでXMLのためタグの中ですべて完結しないといけないので分岐を作る時はよく考えないと
どこからどこまでが1ブロックの中かわからなくなったり・・・

IF文

javaやpythonなどほかの言語で一般的にあるif文はありますが記述方法に一癖あります。
単純な条件に一致したときになにかを出力それ以外の時は出力しないときは以下のようになります。

<xsl:if test="条件">
<!-- 条件に一致したときに出力する内容 -->
</xsl:if>

一致したときと明記しているのはif elseif はおろかif elseがこの文法では使えません。
なのでif elseを使いたいときは次の方法を行いましょう。

IF ELSE文

<xsl:choose>
    <xsl:when test="条件">
        <!-- 条件に一致したときに出力する内容 -->
    </xsl:when>
    <xsl:when test="条件">
        <!-- 条件に一致したときに出力する内容 -->
    </xsl:when>
    <xsl:when test="条件">
        <xsl:choose>
            <xsl:when test="条件">
                          <!-- 条件に一致したときに出力する内容 -->
            </xsl:when>
            <xsl:otherwise>
                          <!-- 条件に一致したときに出力する内容 -->
            </xsl:otherwise>
        </xsl:choose>
    </xsl:when>
    <xsl:otherwise>
        <!-- 条件に一致したときに出力する内容 -->
    </xsl:otherwise>
</xsl:choose>

上記のように<xsl:choose>タグでくくることで<xsl:when>タグ<xsl:otherwise>タグが使えて条件の分岐が行えます。
通常のif elseを作りたければ<xsl:when>タグ<xsl:otherwise>タグのみ
if elseifを作りたければ<xsl:when>タグでelseifの条件を記載していくことになります。
また中にさらに<xsl:choose>タグを入れることで別の分岐を作ることができます。

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3