目次へ

3.2 xsl:element を用いた要素の生成

<xsl:element
  name = { qname }
  namespace = { uri-reference }
  use-attribute-sets = qnames>
  <!-- Content: template -->
</xsl:element>

xsl:element 要素は、結果ツリーに要素を挿入します。要素の名前は、必須である name 属性によって与えられ、名前空間 URI は、任意である namespace 属性によって与えられます。また、xsl:attribute 要素や、xsl:attribute-set を use-attribute-sets 属性で参照することによって属性を追加することができます。xsl:element 要素に含まれるのは生成された要素の属性および子を生成するためのテンプレートです。

<xsl:template match="/">
  <xsl:element name="root">
    <xsl:element name="info">
      <xsl:value-of select="root_before/info_before" />
    </xsl:element>
  </xsl:element>
</xsl:template>

上記のテンプレートを info.xml に適用すると以下の結果を得られます。

<root><info>information</info></root>

3.3 xsl:attribute を用いた属性の生成

<xsl:attribute
  name = { qname }
  namespace = { uri-reference }>
  <!-- Content: template -->
</xsl:attribute>

xsl:attribute 要素は結果ツリーの要素に属性を追加します。要素の名前は、必須である name 属性によって与えられ、名前空間 URI は、任意である namespace 属性によって与えられます。xsl:attribute 要素は xsl:attribute-set 要素や xsl:element 要素等を親要素として持ちます。

xsl:attribute 要素はテキストノードだけを生成するテンプレートを含みます。結果ツリーに追加される属性の値は、このテンプレートが処理された結果の値となります。

<xsl:template match="/">
  <xsl:element name="root">
    <xsl:element name="info">
      <xsl:attribute name="pic"><xsl:value-of select="root_before/pic_before" /></xsl:attribute>
      <xsl:value-of select="root_before/info_before" />
    </xsl:element>
  </xsl:element>
</xsl:template>

上記のテンプレートを info.xml に適用すると以下の結果を得られます。

<?xml version="1.0" encoding="UTF-8"?>
<root><info pic="pic.jpg">information</info></root>

3.4 名前付き属性の集合

<xsl:attribute-set
  name = qname
  use-attribute-sets = qnames>
  <!-- Content: xsl:attribute* -->
</xsl:attribute-set>

xsl:attribute-set 要素は属性の集合を定義します。name は必須属性であり、属性の集合の名前を指定します。use-attribute-sets は任意属性であり、 空白で区切られた属性の名前を指定します。xsl:attribute-set 要素に use-attribute-sets 属性を指定した際、属性の集合が直接的または間接的に自分自身を使用することはできません。

xsl:attribute-set 要素は、0個以上の xsl:attribute 要素を含みます。

以下の例は、imgStyle という名前付き属性の集合を生成し、テンプレートルール内で使用するものです。

<xsl:attribute-set name="imgStyle">
  <xsl:attribute name="src"><xsl:value-of select="root_before/pic_before" /></xsl:attribute>
  <xsl:attribute name="style">width:180px; height:190px;</xsl:attribute>
  <xsl:attribute name="title"><xsl:value-of select="root_before/info_before" /></xsl:attribute>
</xsl:attribute-set>

<xsl:template match="/">
  <xsl:element name="img" use-attribute-sets="imgStyle"/>
</xsl:template>

上記のテンプレートを info.xml に適用すると以下の結果を得られます。

<?xml version="1.0" encoding="UTF-8"?>
<img src="pic.jpg" style="width:180px; height:190px;" title="information"/>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp