@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

属性値のエスケープ無効化

1
投稿者投稿内容
nasu
会議室デビュー日: 2004/04/14
投稿数: 19
投稿日時: 2004-06-03 11:36
xsltで結果ツリーにおける属性値のエスケープを無効化するにはどうすればよいのでしょうか?私は以下を試してみました。これでうまくいくはずだと思ったのですが…。
<xsl:attribute name="">
 <xsl:value-of select="" disable-output-escaping="yes"/>
</xsl:attribute>

 何か他によい方法はないでしょうか?
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-03 23:06
XSLT 的にはエラーです
16.4 出力エスケープの無効化
http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#disable-output-escaping
の中間あたり、に書いてます。

XML 仕様でもエラーです、属性値には CDATAセクションは無いですし。

非XMLを作るのですから、テキスト処理で後加工するとか。
nasu
会議室デビュー日: 2004/04/14
投稿数: 19
投稿日時: 2004-06-03 23:32
 ご指摘のとおり、エスケープ無効化はテキストノードに限ると、ドキュメントにはっきり書いてありましたね。私も質問を書いた後になってから発見して苦笑しておりました。
 後は、ご指摘いただいたとおり、なんとか文字列処理で対処してみたいと思います。
 ご回答いただきありがとうございました。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-04 15:13
関連追加
XSLT2.0 のトピック解説には character-map が載っていましたが。

Entity and Character References By Bob DuCharme
http://www.xml.com/lpt/a/2004/06/02/tr-xml.html

< → <
とか可能なのでしょうか?

”→ ""


→ <br/>
できる?

XSLT2.0 の先行実装のソフトは?
EXSTL,NXSLT,Saxon,xsltproc ・・・

入力は DTDのENTITY宣言で、出力は XSLTのoutput-character
テキストはムズかしい

[ メッセージ編集済み 編集者: MMX 編集日時 2004-06-16 15:34 ]
nasu
会議室デビュー日: 2004/04/14
投稿数: 19
投稿日時: 2004-06-07 15:05
 XSLTにそんな機能が追加されるんですか、知りませんでした。実装が出るのが待ち遠しいなあ。
 私はCocoon2を少しいじくっているのですが、どうもTransformerでもSerializerでも、文字列のプロセッシングをどうやって実現したらよいのか分からなくて困っています。(というより、Cocoonをいじりはじめて以来、ずうっと困っています^^; 個人的には、この複雑怪奇であんまり動いてくれないフレームワークを『刻苦ぅーん痛』と名づけております)
 SerializerでSAXイベントを受けるcharacters(char[] chr, int start, int length)メソッド内部に文字列置換処理を書けばいいだろうと簡単に考えていたのですが、文字配列全体に処理をかけた場合も、開始位置引数および文字列長引数を使用して切り出してきた部分文字列に対して処理をかけた場合でも、処理した結果をどこへ入れればいいのか分かりません。窮余の一策として、chrが大元の文書全体の文字配列を格納しているどこかの配列からの参照渡しになっていることを期待して、処理結果をchrに代入したりもしてみましたが、やっぱりだめでした。どうもよく分かりません。
 ただ、上のことはまた別のスレッドを立てて質問しようかと思っています。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-07 16:36
飛騨の職人さんのような、手作りも現在は可能です。
[xml-users 8826] Re: MSXMLと.NETFramework ClassLibraryのXSLT変換の相違
http://www2.xml.gr.jp/log.html?MLID=xmlusers&TID=8815

<xsl:for-each select = "@*">
<xsl:text> </xsl:text>
<xsl:value-of disable-output-escaping="yes" select="name()" />
<xsl:text>=</xsl:text>
<xsl:text disable-output-escaping="yes">"</xsl:text>
<xsl:value-of select="." />
<xsl:text disable-output-escaping="yes">"</xsl:text>
</xsl:for-each>

XSLT !斬り!
nasu
会議室デビュー日: 2004/04/14
投稿数: 19
投稿日時: 2004-06-08 00:26
 こ、こんな手があったとは!(o_O)
…ただ、「すぐに試してみますっ」と言えないのは何故?(でも結局は使っちゃうんだろなー)
 MMXさん情報くれてありがとうございます。
1

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

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