web-dev-qa-db-ja.com

XSLを使用してXMLファイルに属性が存在するかどうかを確認する方法

実行時に、XMLファイルの2つの形式を使用できます。

  1. <root>
        <diagram> 
            <graph color= "#ff00ff">    
                <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
                <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
            </graph>  
        </diagram> 
    </root>
    
  2. <root>
        <diagram> 
            <graph>    
                <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
                <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
            </graph>  
        </diagram> 
    </root>
    

色属性の存在に応じて、xaxisとyaxisの値を処理する必要があります。

XSLを使用してこれを行う必要があります。誰も私がこれらの条件を確認できるスニペットを示唆するのを手伝ってくれますか?.

使ってみた

<xsl: when test="graph[1]/@color">
     //some processing here using graph[1]/@color values
</xsl:when>

エラーが発生しました...

27
srivatsa

条件付き処理を行う非常に簡単な方法 XSLTパターンマッチングの完全なパワーを使用し、「プッシュ」スタイルのみを使用します。これにより、<xsl:if>などの条件付き命令を使用する必要がなくなります<xsl:choose>

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/root/diagram[graph[1]/@color]">
  Graph[1] has color
 </xsl:template>

 <xsl:template match="/root/diagram[not(graph[1]/@color)]">
  Graph[1] has not color
 </xsl:template>
</xsl:stylesheet>

この変換が次のXMLドキュメントに適用される場合

<root>
    <diagram>
        <graph color= "#ff00ff">
            <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
            <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
        </graph>
        <graph>
            <xaxis>101 102 103 1012 10312 103123 101231 1023 </xaxis>
            <yaxis>101 102 103 1012 10312 103123 101231 1023 </yaxis>
        </graph>
    </diagram>
</root>

必要な正しい結果が生成されます

  Graph[1] has color

このXMLドキュメントに同じ変換が適用される場合

<root>
    <diagram>
        <graph>
            <xaxis>101 102 103 1012 10312 103123 101231 1023 </xaxis>
            <yaxis>101 102 103 1012 10312 103123 101231 1023 </yaxis>
        </graph>
        <graph color= "#ff00ff">
            <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
            <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
        </graph>
    </diagram>
</root>

もう一度正しい結果が生成されます

  Graph[1] has not color

このソリューションをカスタマイズできます必要なコードを最初のテンプレート内に配置し、必要に応じて2番目のテンプレート内に配置します。

32

このように1つの一致でテンプレートをカスタマイズします

<xsl:template match="diagram/graph">
  <xsl:choose>
    <xsl:when test="@color">
         Do the Task
    </xsl:when>
    <xsl:otherwise>
         Do the Task
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>**
17
vignesh

私はそれを取得しません-適用テンプレートを使用するためのいくつかのわずかな構文微調整を除いて:

<xsl:template match="graph[1][@color]">
  <!-- your processing here -->
</xsl:template>

あなたが実際に何をしたいかを知らずにあなたに伝えることができることはあまりありません。

1
annakata