- PR -

XSLでの条件文(if文)

1
投稿者投稿内容
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-21 19:03
XSLで「もしAでないかBでないかCでないかDでないなら表示」を実現させたいのですがうまくいきません。

具体的には
<xsl:if test="親NODE/子NODE!='0'" or test="親NODE/子NODE!='100'" or test="親NODE/子NODE='1300'" or test="親NODE/子NODE='1700'">
とか
<xsl:if test="親NODE/子NODE!='0'or'100'or'1300'or'1700'">
とか
<xsl:if test !="親NODE/子NODE='0'"
or test !="親NODE/子NODE='100'"
or test !="親NODE/子NODE='1300'"
or test !="親NODE/子NODE='1700'">
などと記述してはみたもののうまくいきません。
どなたか解る方いらっしゃいましたら
ご教示ください。お願いします。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-12-21 20:43
るぱんです。

やりたい事は以下のようなものであってますか?
コピペして試してみて下さい。

無理にxsl:if使うと混乱します。
switch-caseに相当するxsl:chose-xsl:whenでどうでしょう?

動作は確認してます。


配置:
コード:
TESTフォルダ
 ┣TEST.xml
 ┗TEST.xsl



TEST.xml
コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="TEST.xsl" type="text/xsl" ?>
<root>
    <parentNode>
        <childNode>1</childNode>
        <childNode>2</childNode>
        <childNode>3</childNode>
        <childNode>4</childNode>
        <childNode>5</childNode>
    </parentNode>
</root>



TEST.xsl
コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="Shift_JIS"/>
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="root">
        <xsl:copy>
            <xsl:apply-templates select="./parentNode"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="parentNode">
        <xsl:copy>
            <xsl:apply-templates select="./childNode"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="childNode">
        <xsl:choose>
            <xsl:when test="./text()='1'">
                <xsl:copy/>
            </xsl:when>
            <xsl:when test="./text()='2'">
                <xsl:copy/>
                <br/>
                <p>テキストの文字が半角2だった場合の表示</p>
            </xsl:when>
            <xsl:when test="./text()='3'">
            </xsl:when>
            <xsl:when test="./text()='4'">
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy/>
                <br/>
                <p>xsl:therwiseに表示される。</p>
                <!--
                <xsl:value-of/>
                -->
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>


最近XMLやってないから腕が鈍ったなぁ。。。
これ作るのに10分かかってる(爆)
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-22 10:48
choose文を使ってできました!ありがとうございました!!

今現在は、似たような条件分岐
「もしnodeAがnodeBと同じでないなら表示」
という事を実現させたいのですが、

<xsl:if test="nodeA != nodeB">

で、エラーは出ないのですが
nodeAとnodeBが同じでも違っていても
表示されません。。。(汗)
結局このような書き方がいけないのでしょうか?
また、この条件分岐に関しても解決方法がありましたら
ご教示していただけると大変助かります。
何卒、よろしくお願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-12-22 11:53
デバッグ出力をしてみたら、if の直前に
nodeA:<xsl:value-of select="nodeA"/>#
nodeB:<xsl:value-of select="nodeB"/>#
空白類に注意
XMLエディタを使っているならXSLTのソースデバッグできるのも、あります

[ メッセージ編集済み 編集者: MMX 編集日時 2004-12-22 11:56 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-12-23 12:09
書き方が変じゃないですか?
そのXSLの書き方を見て、非常に違和感を覚えました。

XMLについて階層の考え方というか、
nodeAとnodeBの関連を比較出来てないと思います。

具体的にどういうXMLのTree構造をとっているか
僕の書き方に倣って書いてみていただけません?

コード:
root
┣親ノード1      1.兄弟間の関係
┃┣子ノード1     ←NodeA
┃┣子ノード2     ←NodeB
┃┗子ノード3
┗親ノード2      ←NodeA
 ┣子ノード1     ←NodeB
 ┣子ノード2     2.親子間の関係
 ┗子ノード3


Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-23 17:37
度々すみません。
NodeA,NodeBと書いたのは略のためです。
実際は、
NodeAはAAA/BBB/CCC/DDD
NodeBはAAA/BBB/CCC/EEE
のようになっていますので
ルパンさんのtreeですと、
1.兄弟間の関係
になります。


1

スキルアップ/キャリアアップ(JOB@IT)