- - PR -
HTMLの断片をXMLに格納して変換する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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-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-29 21:36
たつきちです。
> MMX様 まったく私の勉強不足でした。 教えて頂いた方法で、 試してみたところ、 解決できました。 おつきあい頂き、 どうもありがとうございました。 _________________ たつきち -o-o-q |
1