- PR -

XSLTで入力XMLの一部ツリーをテキストノードに出力

1
投稿者投稿内容
mes
会議室デビュー日: 2004/06/27
投稿数: 2
投稿日時: 2004-06-27 19:32
XSLTで質問があります。

入力XMLの一部ツリーをエスケープ済文字列として
テキストノードに出力させようとしています。

入力
------------------------------------
<root>
<items>
<item>a</item>
<item>b</item>
</items>
</root>
------------------------------------

出力
------------------------------------
<out>
<tree>
&lt;items&gt;
&lt;item&gt;a&lt;/item&gt;
&lt;item&gt;b&lt;/item&gt;
&lt;/items&gt;
</tree>
</out>
------------------------------------

なにかうまい方法は、ありませんでしょか?
どうかご教授よろしくお願いします。

XSLTプロセッサ:Xalan
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-27 22:53
テキストを出力するだけです

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">

<xsl:call-template name="embed">
<xsl:with-param name="elist" select="*"/>
</xsl:call-template>

</xsl:template>

<xsl:template name="embed">
<xsl:param name="elist"/>
<xsl:for-each select="$elist">

<xsl:choose>
<xsl:when test="not(node())">
<xsl:copy-of select="."/>
</xsl:when>

<xsl:otherwise>
&lt;
<xsl:value-of select="local-name()"/>
&gt:

<xsl:call-template name="embed">
<xsl:with-param name="elist" select="*|text()"/>
</xsl:call-template>

&lt;/
<xsl:value-of select="local-name()"/>
&gt;
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>
=====================================--
mode を使って振り分けるほうが XSLT らしさが増すかもしれません。
--------------------------
こうゆう、議論も忘れずに
Escaped Markup Considered Harmful
http://www.xml.com/lpt/a/2003/08/20/embedded.html

[ メッセージ編集済み 編集者: MMX 編集日時 2004-06-28 08:56 ]
mes
会議室デビュー日: 2004/06/27
投稿数: 2
投稿日時: 2004-06-29 01:44
MMXさん、ありがとうございました。
できました。

引用:

こうゆう、議論も忘れずに
Escaped Markup Considered Harmful
http://www.xml.com/lpt/a/2003/08/20/embedded.html



なるほど、いろいろ弊害がありそうですね。
勉強になりました。奥が深いです。
1

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