- PR -

AjaxでのXSLT変換について

投稿者投稿内容
ザック
会議室デビュー日: 2005/01/13
投稿数: 8
投稿日時: 2006-06-19 12:02
現在、下記環境においてAjaxを使用したWebシステムを開発しています。

O/S   Redhat Linux 8.0 (Kernel2.4.20-18)
言語   Perl 5.8.0
DB    PostgreSQL 7.2.3
Webサーバ Apache 2.0.40
ブラウザ  IE6のみ

javaScriptでPerlから出力されるXMLイメージを
サーバ側のXSLTファイルを用いて変換してHTMLとして表示しています。
・変換方法↓
function loadTextFile(target)
{
targetNm = target;
xmlhttp.abort();
xmlhttp.onreadystatechange = readystatechange;
xmlhttp.open("GET", "../cgi-bin/" + target + ".cgi", true);
xmlhttp.send(null);
}


function readystatechange(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var xml = xmlhttp.responseXML;

var xslt = new ActiveXObject("Microsoft.XMLDOM");
xslt.async = false;
xslt.load("../xslt/" + targetNm + ".xsl"); //XSLTロード
targetNm = "";
var text = xml.transformNode(xslt);     //HTMLイメージに変換
top.f_top.document.getElementById("result").innerHTML = text;
}
if ((xmlhttp.readyState == 4) && (xmlhttp.status == 404))
・・・・・・・
}

で以下のXSLTファイルを使用するとボタン「modify」押下時に起動するjavascript
が動作せず。「オブジェクトを指定してください」エラーとなります。

XSLTソース↓
<?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="UTF-8"/>
<xsl:template match="/">

<HTML LANG="en">
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset="></META>
<TITLE>Administration</TITLE>
<script type = "text/javascript" src = "http://10.1.6.234/SHIMIZUTEST/js/aaa100010.js" ></script> ←@
</HEAD>
<BODY CLASS="bodyimg" TOPMARGIN="0">
<DIV CLASS="title">Company Information</DIV>
<FORM NAME="f102001" METHOD="POST">
<TABLE CLASS="SelCompHnd">
<TD WIDTH="100">
<tr>
<INPUT TYPE="button" NAME="Add" CLASS="ButtonWhite" VALUE="Add" onClick="Goto()"></INPUT>
</tr>
</TD>
</TABLE>
<DIV STYLE="font-family:Verdana;font-size:8px;width:470px;overflow:auto;">
<TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box">
<COLGROUP WIDTH="170"></COLGROUP>
<COLGROUP WIDTH="90"></COLGROUP>
<COLGROUP WIDTH="80"></COLGROUP>
<COLGROUP WIDTH="70"></COLGROUP>
<td>
<TR>
<TH CLASS="TblHead_admin" >Name</TH>
<TH CLASS="TblHead_admin" >Abbreviation</TH>
<TH CLASS="TblHead_admin" >Type</TH>
<TH CLASS="TblHead_admin" >Modify</TH>
</TR>
</td>
</TABLE>
</DIV>
<DIV STYLE="font-family:Verdana;font-size:8px;width:470px;height:352px;overflow:auto;">
<TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box">
<COLGROUP WIDTH="170"></COLGROUP>
<COLGROUP WIDTH="90"></COLGROUP>
<COLGROUP WIDTH="80"></COLGROUP>
<COLGROUP WIDTH="70"></COLGROUP>

<xsl:for-each select="root/data/Company/record">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="addreviation"/></td>
<td><xsl:value-of select="type"/></td>
<!--<td><xsl:apply-templates select="Modify"/></td>-->
<td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="{Modify}"/></td>
</tr>
</xsl:for-each>
</TABLE>
</DIV>
</FORM>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="Modify">
<xsl:element name="input">
<xsl:attribute name="type">button</xsl:attribute>
<xsl:attribute name="name">Modify</xsl:attribute>
<xsl:attribute name="value">Modify</xsl:attribute>
<xsl:attribute name="CLASS">ButtonWhite</xsl:attribute>
<xsl:attribute name="onClick"><xsl:value-of select="Modify"/></xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>


上記ソースの@の部分でjavascriptがサーバから参照できていないと思うのですが、
XSLT&Ajaxの知識が未熟なため原因がわかりません。
new ActiveXObject("Microsoft.XMLDOM");
を使用する際にこういう現象がおきるのでしょうか?

どなたかご教授いただきたく。
お願いいたします|(__)|




MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-06-19 14:02
デバッグ出力
<td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="{Modify}"/>

ONCLICK=<xsl:value-of select="Modify"/>

</td>

[ メッセージ編集済み 編集者: MMX 編集日時 2006-06-19 14:11 ]
ザック
会議室デビュー日: 2005/01/13
投稿数: 8
投稿日時: 2006-06-19 15:49
ご返信ありがとうございます。
以下のXMLソースを使用しています。
XMLソース↓

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xxx100030.xsl"?>
<root>
<head>
<procid>id</procid>
<status>status</status>
<rowcnt>rowcnt</rowcnt>
<command>command</command>
<condition>
<Name>testtest</Name>
</condition>
<javascript/>
</head>
<data>
<Company>
<record>
<id>1</id>
<name>test</name>
<addreviation>testtest</addreviation>
<type>testtesttest</type>
<updated>206-06-16</updated>
<invalid>no</invalid>
<modify>Goto()</modify>
</record>
<record>
<id>1</id>
<name>test</name>
<addreviation>testtest</addreviation>
<type>testtesttest</type>
<updated>206-06-16</updated>
<invalid>no</invalid>
<modify>Goto()</modify>
</record>
<record>
<id>1</id>
<name>test</name>
<addreviation>testtest</addreviation>
<type>testtesttest</type>
<updated>206-06-16</updated>
<invalid>no</invalid>
<modify>Goto()</modify>
</record>
</Company>
</data>
</root>

<modify>ノードにjavascriptの関数名を記述しています。

javascriptソース↓
function Goto()
{
alert("aaaa");
document.f102001.target = "f_top";
document.f102001.action = 'aaaaa';
document.f102001.submit();
return false;
}

○変換後HTMLソース↓
<HTML LANG="en">
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=">
<TITLE>Administration</TITLE><script type="text/javascript" src="http://127.0.0.1/SHIMIZUTEST/js/xxx100010.js"></script></HEAD>
<BODY CLASS="bodyimg" TOPMARGIN="0">
<DIV CLASS="title">Company Information</DIV>
<FORM NAME="f102001" METHOD="POST">
<TABLE CLASS="SelCompHnd">
<TD WIDTH="100">
<tr><INPUT TYPE="button" NAME="Add" CLASS="ButtonWhite" VALUE="Add" onClick="loadXSTLFile('xxx100020')"></tr>
</TD>
</TABLE>
<DIV STYLE="font-family:Verdana;font-size:8px;width:470px;overflow:auto;">
<TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box">
<COLGROUP WIDTH="170"></COLGROUP>
<COLGROUP WIDTH="90"></COLGROUP>
<COLGROUP WIDTH="80"></COLGROUP>
<COLGROUP WIDTH="70"></COLGROUP>
<td>
<TR>
<TH CLASS="TblHead_admin">Name</TH>
<TH CLASS="TblHead_admin">Abbreviation</TH>
<TH CLASS="TblHead_admin">Type</TH>
<TH CLASS="TblHead_admin">Modify</TH>
</TR>
</td>
</TABLE>
</DIV>
<DIV STYLE="font-family:Verdana;font-size:8px;width:470px;height:352px;overflow:auto;">
<TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box">
<COLGROUP WIDTH="170"></COLGROUP>
<COLGROUP WIDTH="90"></COLGROUP>
<COLGROUP WIDTH="80"></COLGROUP>
<COLGROUP WIDTH="70"></COLGROUP>
<tr>
<td>test</td>
<td>testtest</td>
<td>testtesttest</td>
<td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="Goto()"></td>
</tr>
</TABLE>
</DIV>
</FORM>
</BODY>
</HTML>

関数Goto()を実行しようとすると「オブジェクトを指定してください。」
と表示されてしまいます。

以上よろしくお願いいたします。



[ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:53 ]

[ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:55 ]

[ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:57 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-06-19 16:33
IE6 で src="http://127.0.0.1/
ということは、ローカルネットでWebサーバ Apache 2.0.40
ですね
ザック
会議室デビュー日: 2005/01/13
投稿数: 8
投稿日時: 2006-06-19 17:20
引用:

MMXさんの書き込み (2006-06-19 16:33) より:
IE6 で src="http://127.0.0.1/
ということは、ローカルネットでWebサーバ Apache 2.0.40
ですね



そうです。
相対パス(../js/xxx100010.js)でやってみたんですがだめだったので・・・。
XSLTにあうようXMLを作成してローカルでXMLをダブルクリックすると
うまくいったのですが(相対パス、Http:://パスとも)
サーバ側から変換してだすと「オブジェクトが見つかりません」
エラーになってしまいます。

以上よろしくお願いいたします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-06-19 17:38
IE6 のアドレス欄に
http: //127.0.0.1/SHIMIZUTEST/js/xxx100010.js
で見えますか
ザック
会議室デビュー日: 2005/01/13
投稿数: 8
投稿日時: 2006-06-19 19:07
引用:

MMXさんの書き込み (2006-06-19 17:38) より:
IE6 のアドレス欄に
http: //127.0.0.1/SHIMIZUTEST/js/xxx100010.js
で見えますか


見えます。

以上よろしくお願いいたします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-06-20 18:46
charset encoding の一致はどうでしょう。

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