読者です 読者をやめる 読者になる 読者になる

AKAI TSUKI

System development or Technical something

xslについて学ぶ5

のhogeに記述する内容

  • "//"
    • これは特定ノード以降のすべての子孫を選択する。/article/titleと/article/section/titleの両方を選ぶことになる。
  • "*"
    • 任意の要素に一致させることができる。
  • "|"
    • 一致させるパスを複数組み合わせることが可能
    • " title | p "とすれば、title要素とp要素に一致する。
  • "tag[@attribute='value']
    • あるタグ(tag)の属性(attribute)が特定の値(value)である場合に一致する。
  • "tag[@attribute]
    • あるタグ(tag)の属性(attribute)がある場合に一致する。
  • "tag[数字]
    • あるタグ(tag)の"数字"番目で指定されたところに一致する。


○入力

  <singleErr att1="aaaa" att2="bbbb" >
   <test>value1</test>
  </singleErr>
  <singleErr att1="aacc" att2="bbdd" >
   <test>value2</test>
  </singleErr>
  <singleErr att1="aaee" att2="bbff" >
   <test>value3</test>
  </singleErr>

○コンバートxsl

<?xml version="1.0" encoding="shift_jis"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >


    <xsl:template match="/" >
      <xsl:apply-templates />
    </xsl:template>
    
    <!-- xmlのトップルートに当たるタグ名を指定する -->
    <xsl:template match="reports" >
      <html><xsl:apply-templates /></html>
    </xsl:template>
    
    <!-- タグを指定して記述内容を書く -->
    <xsl:template match="singleErr" >
      <xsl:value-of select="./@att1" />,<xsl:value-of select="./@att2" />
    </xsl:template>

    <!-- タグを指定して記述内容を書く -->
    <xsl:template match="DobuleErr/item" >
      <xsl:value-of select="../@att1" />,<xsl:value-of select="." />
    </xsl:template>
    
    <!-- タグを指定して記述内容を書くサンプル -->
    <xsl:template match="singleErr[1]" >
      <xsl:value-of select="./@att1" />
    </xsl:template>

    <!-- タグを指定して記述内容を書くサンプル -->
    <xsl:template match="singleErr[@att1='aaee']" >
      <xsl:value-of select="test" />
    </xsl:template>


</xsl:stylesheet>

○出力

<html>
  aaaa
  aacc,bbdd
  value3
  
    aagg,error1
    aagg,error2
    aagg,error3
  
  
    aaii,error4
    aaii,error5
    aaii,error6
  
</html>

これやってみた分かったのは
matchする条件が複数箇所で該当すると
後の条件が適用されるのね。

2箇所で該当して2箇所に出力されることを想定したんだけど・・・^^;