- PR -

SCRIPT部分が実行できません

1
投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-07-11 16:48
お世話になります。
XSLTの書き方で、どうしてもうまくいかないところがあるため、
ご助言いただけますでしょうか。

次のように、ファイルを2つつくりました。

list1.xsl(insert.innerHTMLの箇所は、実際は改行せずに書いています)
コード:

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/name">
<html>
<head><title>test</title>
<script>
<xsl:text disable-output-escaping="yes">
function test1(){
insert.innerHTML = "<xsl:template match=\\\\"name\\\\">
<xsl:if test=\\\\"contains(name, 'ボード')\\\\">
<xsl:value-of select=\\\\"name\\\\"/><br/>
</xsl:if></xsl:template>";}
</xsl:text>
</script>
</head>
<body onload="test1()">
<div id="insert"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>



test.xml
コード:

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="list1.xsl"?>
<root>
<node>
<name>マザーボード</name>
<price>15000</price>
</node>
<node>
<name>ハードディスク</name>
<price>8000</price>
</node>
</root>



やろうとしていることは、
nameの欄に「ボード」という単語が入っているノードの
name一覧を抽出する、というものなのですが、
これを実行してみると、

コード:

マザーボード15000ハードディスク8000



と、全ての内容が改行なしで表示されてしまいます。
どうもこの<script>で囲まれた部分を全く認識していないようで、
script部分をまるっと削除しても、同じものが表示されました。

どこが間違っているのか、指摘していただけないでしょうか?
よろしくお願いいたします。

[ メッセージ編集済み 編集者: Wingard 編集日時 2007-07-11 16:49 ]
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2007-07-11 18:55
生成されたHTMLを提示出来ませんか?
chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 2007-07-11 21:48
わざわざスクリプトを書かなくても、単純にこれ↓ではだめですか?

コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/">
<html>
  <head>
    <title>test</title>
  </head> 
  <body>
    <div id="insert">
      <xsl:apply-templates select="root/node"/>
    </div>
  </body>
</html>
</xsl:template>

<xsl:template match="node">
  <xsl:if test="contains(name, 'ボード')">
    <xsl:value-of select="name"/><br />
  </xsl:if>
</xsl:template>

</xsl:stylesheet>

Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-07-12 09:14
ご回答ありがとうございます。

>ひろ@yaさん
生成されたHTMLというのは、
どこを見れば良いのでしょうか?
普通にIE右クリックで「ソースを見る」では、
test.xmlのソースが表示されてしまいます。

>Chackさん
本当は、ボタンを何個か用意して、
Aのボタンを押したら「ボード」が含まれているリストを、
Bのボタンを押したら「ハード」が含まれているリストを
表示するといったことをやりたかったので、
そこはJavaScriptで書きたいと思いました。

もっと言えば、テキストボックスを使って、
XMLの検索のようなことができないかと思っているのですが、
それは次の段階かなと思い、今回の質問をさせていただきました。


引き続きご回答よろしくお願いいたします。

chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 2007-07-12 16:01
ふむ。とりあえずスクリプトとして書きたいならこんな↓感じになると思います。
(Windows XP + IE7で確認)
コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/">
<html>
  <head>
  <title>test</title>
  <script>
    function test1(){
      document.getElementById("insert").innerHTML =
        "<xsl:apply-templates select='root/node' />";
    }
  </script>
  </head>
  <body onload="test1()">
    <div id="insert"/>
  </body>
</html>
</xsl:template>

<xsl:template match="node">
  <xsl:if test="contains(name, 'ボード')">
    <xsl:apply-templates select="name" />
  </xsl:if>
</xsl:template>

<xsl:template match="name"><xsl:value-of select="." /><br /></xsl:template>

</xsl:stylesheet>



ちなみに、どんなhtmlに変換されているかを確認したいなら
とりあえず、これ↓で確認できます。
ボタンを押したらXSLT変換する方法の参考にもなるでしょう。

コード:
<?xml version="1.0" encoding="shift_jis"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<script type="text/javascript">
function transform()
{
  var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
  xmlDoc.async = false;
  xmlDoc.load("test.xml");

  var xslDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
  xslDoc.async = false;
  xslDoc.load("list1.xsl");

  document.getElementById("insert").innerText = xmlDoc.transformNode(xslDoc);
}
</script>
</head>
<body>

  <input id="Button1" type="button" value="変換" onclick="transform();" />
  <br />
  <div id="insert"/>

</body>
</html>



Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-07-13 09:39
>chackさん

丁寧にご回答くださり、ありがとうございます。
ただ、私の頭では理解するのに少々お時間をいただかないとなりませんので、
申し訳ありませんが、ご返答はのちほど差し上げたいと思います。

ひとまずお礼まで。
1

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