goo blog サービス終了のお知らせ 

WWW備忘録

about XML XSLT FEED(RSS,ATOM) CSS DHTML SEO GoogleMap

XSLT→HTMLでもjs document.write()は使えない[Firefox]

2006年01月03日 12時00分57秒 | XSLT
XHTML出力であった「XSLTで記述したjavascriptをFirefoxで表示する(10)」をHTML出力に変更したが、やはりdocument.write()は使えなかった。

[ソース]
-- script.js --
alert("Javascript Run");
document.write("Javascript works");
alert("Javascript Run2");
--
※赤字の行を追加/削除してテストする。

-- rss.xml --
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="rss.xsl" type="text/xsl"?>
<rss version="2.0">
</rss>
--

-- rss.xsl --
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
            version="4.0"
            indent="yes"
            encoding="UTF-8"
            media-type="text/html"
            doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>

    <xsl:template match="rss">
        <html>
        <head>
            <title>XML+XSL+JAVASCRIPT TEST</title>
        </head>
        <body>
        <h1><font color="red">XML+XSL+JAVASCRIPT TEST</font></h1>

<script type="text/javascript" src="./script.js"></script>
<noscript>
<p>Javascript <strong>does not </strong>work.</p>
</noscript>
<p>Test End</p>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
--
※太文字を元記事に追加

[XSLT変換後のソース]
※ブラウザの「選択部分のソースを表示」で得た
<html>
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <title>XML+XSL+JAVASCRIPT TEST</title>
</head>
<body>
    <h1><font color="red">XML+XSL+JAVASCRIPT TEST</font></h1>
    <script src="./script.js" type="text/javascript"></script>
    <noscript>
        <p>Javascript <strong>does not </strong>work.</p>
    </noscript>
    <p>Test End</p>
</body>
</html>
--
※一応HTMLになっているように思える。

[結果]
script.jsのdocument.write("Javascript works");
を抜くと動作するが、
戻すと"Javascript works"を表示した後ルーピングしてしまう。

[考察]
xml+xsltでは、document.write()は使えない。
やりたいことは、「条件にしたがった特定のhtml要素を追加」であるが、その条件がxml+xslt展開時に準備されているなら、javascriptではなくxsltの中で演算をして「特定要素を追加」することができそうである。
キーワード XSLプログラミング、DOM で調べてみる