- PR -

XSLTで任意の要素を作成

1
投稿者投稿内容
hirotan
常連さん
会議室デビュー日: 2004/07/20
投稿数: 41
投稿日時: 2004-10-14 18:24
XSLTで要素を作成する場合は通常xsl:element,もしくは直接<aaa>〜</aaa>のように記述することができますが、文字列として変数に格納しておいたものを要素名として要素を作成することはできませんでしょうか。後者の要素の作り方で、汎用的に作れないかというところでつまずいてしまいました。

例:
var1="<AAA attr="属性">"←こんなような文字列を使用します。
var2=2</AA>"

<xsl:template match="/">
<xsl:value-of select="$var1"/>
ああああ
</xsl:value-of select="$val2"/>
</xsl:template>

そもそも変数に上のような文字列を格納することはできないのでしょうか。

すみません。わかる方がいらっしゃいましたらどなたか教えてください。
よろしくお願いします。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-10-14 19:27
XSLTの disable-output-escaping="yes" を調べること。

しかし、この発想自体が 手続き型の 反XSLT ですから、先は袋小路です。
ダメダメです、テキストPRINTやDOMで今までどおりのほうがいいです。

テキストからXMLを発生させるのにはXSLTは適しません。
そういう目標で設計されてないのは、文字列関数が極少なので、
理解できるでしょう。

XSLT らしさなら

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="V1"><A attr="Z1"/></xsl:variable>
<xsl:variable name="V2" select="msxsl:node-set($V1)/*"/>

<!-- パラメータも 初期から XML で入れておくこと -->
<xsl:template match="/">
<ROOT>
<xsl:element name="{local-name($V2)}">
<xsl:copy-of select="$V2/@*"/>
山田押切臼田蛯原
</xsl:element>
</ROOT>
</xsl:template>
</xsl:stylesheet>

かな???
カレントノードを変えてもよいなら、for-each で変えて <xsl:copy が使えます。
node-set関数の適用手順はプロセッサにより、違います。
=====================================================================

Wikiテキストから XML を作る例は
Hacking XML : Hack #94
http://www.xml.com/lpt/a/2004/09/15/XMLHacks.html
にあります。 OpenSP1.5 の osx でも動きました。
(日本語処理の設定は知りません)
====================================================================
XMLのAPIは多種類ありますから、あなたの処理の発想に合致するのを探すとよいとおもいます。

[ メッセージ編集済み 編集者: MMX 編集日時 2004-10-14 22:23 ]

[ メッセージ編集済み 編集者: MMX 編集日時 2004-10-15 08:41 ]
hirotan
常連さん
会議室デビュー日: 2004/07/20
投稿数: 41
投稿日時: 2004-10-14 22:45
アドバイスを元にいろいろやってみます。
ありがとうございました。

また何かありましたらよろしくお願いします。
1

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