- PR -

HTMLタグに一括いて属性を付加する方法

投稿者投稿内容
なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2001-11-22 13:40
通常、一括して属性を付加したい場合、

<xsl:attribute-set name="table_attr_set1">
 <xsl:attribute name="bgcolor">#CCCC99</xsl:attribute>
 <xsl:attribute name="border">1</xsl:attribute>
 <xsl:attribute name="bordercolor">#000000</xsl:attribute>
</xsl:attribute-set>

と定義しておいて、

 <xsl:element name="table" use-attribute-sets="table_attr_set1">
   ・
 </xsl:element>

と記述しますが、これを<xsl:element>を使用せずに、<table>を使用した場合には
<xsl:attribute-set>を付加することはできないのでしょうか?
本を見る限りではできそうにないのですが、もしこれに代わるよい方法があれば
教えて頂きたいと思います。

よろしくお願いします。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2001-11-22 21:31
CSS? :-b
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2001-11-23 11:32
この場合は、結局CSSです、グローバルで文字列を定義して
<xsl:param select="'borler:1pt;bgcolor:#....;'" name="sty1"/>
、属性値テンプレートで展開します
<table style="{$sty1}"/>
CSSのセレクタが対応できない場合なら。
なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2001-11-26 18:32
やはりCSSしか方法はないみたいですね。
しかしCSSだと指定できない属性もあるので、CSSでは対応しきれないんですよ。
すみません。m(__)m
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-11-27 23:36
こんにちは、XMLを勉強中のものです。

私が参考にしている「改訂版 標準XML 完全解説(上)」をみると、非検証XMLプロセッサの場合、要素型宣言がかかれていない要素に対して属性リスト宣言をかいてもエラーとならず、その属性のデフォルト値が付与されるようです。(P185 参照)

ということで、例えばXSL文書に以下のような宣言を付与することはできないのでしょうか?
(すみません。試していません。 )

<!DOCTYPE xsl:stylesheet [
<!ATTLIST table bgcolor NMTOKEN "#CCCC99">
<!ATTLIST table border NMTOKEN "1">
<!ATTLIST table bordercolor NMTOKEN "#000000">
]>

ただ、XSLプロセッサがXSL文書をXML文書として正しいかどうか検証するのか、上の書き方は正しいのか、属性リストのデフォルト値は付与されるのかなど疑問となる点も多々あります。
そもそも、XSLにDOCTYPE宣言があるものを見たことがないし・・・。


やっぱり、こんな書き方は無理なんでしょうか?
(できたとしてもやるべきでない?)


識者の方のご意見をお願いいたします。

[ メッセージ編集済み 編集者: ふうた 編集日時 2001-11-28 00:45 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-11-29 12:07
先の方法をちょっと試してみたところ、いちおう属性が付与されていました。

ただし、私が使っているXMLパーサは、富士通製のものをつかっていて
他のパーサでも同様なのかどうかは分かりません。

やっぱり、CSSで実現するのが普通なんでしょうか??
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2001-11-29 14:11
IE5.5SP2+MSXML3SP2 で試すとできました。 #は名前文字かな
----------------------------------- defatt.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE xsl:stylesheet [
<!ATTLIST table bgcolor CDATA "#CCCC99">
<!ATTLIST table border CDATA "1">
<!ATTLIST table bordercolor CDATA "#000000">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html><head><title>defauatt</title></head><body><table>
<tr><td>sljf</td></tr>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
-----------------------------------
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="defatt.xsl"?>
<T></T>
-----------------------------------
雰囲気としてはプログラム内で定数の定義と参照の、短かく書く方法
のたぐいです。
ちなみに、Adobe SVG では エンティティを多用してます。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2001-11-29 16:04
引用:
<xsl:element>を使用せずに、<table>を使用した場合には
<xsl:attribute-set>を付加することはできないのでしょうか?


コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
<xsl:template match="/"> 
<html><head><title>defauatt</title></head><body>
<table><xsl:call-template name="addattrs"/>
<tr><td>sljf</td></tr>
</table>
</body></html>
 </xsl:template>

<xsl:template  name="addattrs">
<xsl:attribute name="bgcolor">#CCCC99</xsl:attribute>
<xsl:attribute name="border">1</xsl:attribute>
<xsl:attribute name="bordercolor">#000000</xsl:attribute>
</xsl:template>
 
</xsl:stylesheet>

あとはこれくらいしか
さらになら、table を一度xslの変数内に作って、後で
属性付加するとか.

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