- PR -

HTMLの断片をXMLに格納して変換する方法

1
投稿者投稿内容
たつきち
会議室デビュー日: 2004/09/25
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2004-09-26 00:29
始めて投稿させていただきます。

現在、XMLを利用した、
更新ツールを個人的に制作しているのですが、
以下のようなXMLとXSLで
HTMLのフォームを作成する
変換をおこないたいのですが、うまくいかず、
長く行き詰まっています。

もし、何か方法をご存じの方がいらっしゃいましたら、
教えて頂けないでしょうか。

--index.xml--
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<xml>
<form><![CDATA[<form action="post.php?id=1" method="post">]]></form>
<title><input type="text" name="title" value="..." /></title>
<text><textarea name="text">...</TEXTAREA></text>
<submit><input type="submit" name="submit" value="submit!" /></submit>
<closeform><![CDATA[</form>]]></closeform>
</xml>

--index.xsl--
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/xml">
<html>
<body>
<xsl:copy-of select="form" />
<blockquote>
<h2><xsl:copy-of select="title" /></h2>
<p><xsl:copy-of select="text" /></p>
<xsl:copy-of select="submit" />
</blockquote>
<xsl:copy-of select="closeform" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>

XMLで
<form>...</form>
<closeform>...</closeform>
とした箇所がブラウザーの出力でタグと認識されません。

formの開始タグと終了タグは、
別個にXSL側で呼び出しをしたい。
そのままで整形式にならないため、
やむをえず、CDATAにしています。

disable-output-escapingも試しましたが、
上手く変換することができません。

変換にはブラウザー Mozilla を使用しています。

| hont@spn1.speednet.ne.jp

[ メッセージ編集済み 編集者: たつきち 編集日時 2004-09-26 16:59 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-09-26 22:27
■名前の先頭に“xml”という文字列がきてはいけない
http://www.atmarkit.co.jp/fxml/rensai/rexml04/rexml04.html

固定部 と 可変部 を 合体させて 結果を作る パターン ですから
いろいろ な形ができるでしょう。この形以外でも考えて見ましょう

それはともかく、CDATA で囲む必要はありませんね。
というか、こういう発想は発展しません(XMLスタイルじゃないから)
それはともかく、何でもいいからXMLエディタを使ったりして整形式
ぐらい、やっておきましょう、機械的にすぐできて手間はかかりません。

xsl:include document関数 xsl:param
など 固定部・可変部 に関連する機構を探求しましょう

その次は、拡張関数・スクリプト拡張・多段XSLT変換など。
-----------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Axml">
<html>
<body>
<xsl:element name="{local-name(form/*[1])}">
<xsl:for-each select="form/*[1]/@*">
<xsl:copy-of select="."/>
</xsl:for-each>
<blockquote>
<h2>
<xsl:copy-of select="title"/>
</h2>
<p>
<xsl:copy-of select="text"/>
</p>
<xsl:copy-of select="submit"/>
</blockquote>
</xsl:element>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<Axml>
<form>
<form action="post.php?id=1" method="post"/>
</form>
<title>
<input type="text" name="title" value="..."/>
</title>
<text>
<textarea name="text">...</TEXTAREA>
</text>
<submit>
<input type="submit" name="submit" value="submit!"/>
</submit>
</Axml>
================================
単純な差込みは XPath+DOM の切り貼り でも簡単にできます
-------------------------------- あるいは
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/Axml">
<html>
<body>

<xsl:for-each select="form/*[1]">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>

<xsl:for-each select="./../.."><!-- カレントもどし -->
<blockquote>
<h2><xsl:copy-of select="title" /></h2>
<p><xsl:copy-of select="text" /></p>
<xsl:copy-of select="submit" />
</blockquote>
</xsl:for-each>

</xsl:copy>
</xsl:for-each>

</body>
</html>
</xsl:template>

</xsl:stylesheet>


[ メッセージ編集済み 編集者: MMX 編集日時 2004-09-27 22:16 ]
たつきち
会議室デビュー日: 2004/09/25
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2004-09-27 11:19
MMX 様、
お返事どうもありがとうございます。

>それはともかく、CDATA で囲む必要はありませんね。
>というか、こういう発想は発展しません(XMLスタイルじゃないから)

>xsl:include document関数 xsl:param
>など 固定部・可変部 に関連する機構を探求しましょう

アドバイスありがとうございました。
頂いたソースと、キーワードを手がかりに勉強します!

自分では、これまで、XSLの文字列関数の
concat(), translate() や
disable-output-escaping
の方法を試して、うまく解決できずに、
はまってしまっていたのです。
苦し紛れに、

<form><!--form action="..." method="post"!--></form>
<closeform><!--/close!--></closeform>

としておいて、!--を取り去るアプローチなど、
(この発想自体駄目だったのでしょうか?)
とにかく文字列の置換や合成だけにこだわってしまっていました。
アドバイスを頂き目から鱗です。

> 名前の先頭に“xml”という文字列がきてはいけない
失礼しました。ご指摘ありがとうございます。

経過も一緒にお知らせしたいところなのですが、
ちゃんと理解するのに1日〜がかかってしまいそうなので、
先にお礼まで。
貴重なお時間をすいません。
本当にありがとうございました。

_________________
たつきち
-o-o-q

[ メッセージ編集済み 編集者: たつきち 編集日時 2004-09-27 11:21 ]
たつきち
会議室デビュー日: 2004/09/25
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2004-09-29 21:36
たつきちです。

> MMX様

まったく私の勉強不足でした。
教えて頂いた方法で、
試してみたところ、
解決できました。

おつきあい頂き、
どうもありがとうございました。
_________________
たつきち
-o-o-q
1

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