请教用javascript读取xml,并进行修改xml数据的问题。

mqzhuang 2006-01-05 03:40:20
用javascript读取xml,并显示在页面上。我设置了一个button,点击后调用一个方法来修改xml的数据。页面也随之改变。这些都实现了。但是我发现xml源文件并没有因此改变,当我重新刷新当前页面时,页面又变回原来的样子。请问各位高手有什么办法?
...全文
1717 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mqzhuang 2006-01-11
  • 打赏
  • 举报
回复
我现在就是要在客户端实现,谢谢大家了!
liuph3000 2006-01-11
  • 打赏
  • 举报
回复
但这个只能在客户端实现,如果要在服务器端实现,我建议你还是用asp

http://www.goofar.com/?ID=634664011139
mqzhuang 2006-01-10
  • 打赏
  • 举报
回复
十分感谢 liuph3000() 这个例子太棒了!!!好多问题都可以从中找到答案。
也很感谢其他帮忙解答问题的高手们!
结贴,放分!
liuph3000 2006-01-10
  • 打赏
  • 举报
回复
rule.xml
============
<?xml version="1.0" encoding="GB2312"?>
<?xml:stylesheet type="text/xsl" href="rule.xsl"?>
<rules>
<rule>
<event>
<id>10001</id>
<name>TFTP下载文件</name>
</event>
<enable>false</enable>
</rule>
<rule>
<event>
<id>10002</id>
<name>TFTP上传文件</name>
</event>
<enable>false</enable>
</rule>
<rule>
<event>
<id>10003</id>
<name>telnet登录成功</name>
</event>
<enable>false</enable>
</rule>

</rules>

rule.xsl
=============
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method= "html"/>
<xsl:param name="ename">undefined</xsl:param>
<xsl:param name="startno">undefined</xsl:param>
<xsl:param name="endno">undefined</xsl:param>

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="rules"/>
</body>
</html>
</xsl:template>

<xsl:template match="rules">
<input type="hidden" name="total_item">
<xsl:attribute name="value"><xsl:value-of select="count(rule[contains(event/name, $ename)])"/></xsl:attribute>
</input>
<TABLE id="viewTable" name="viewTable" width="100%" border="1" bordercolor="#85979f" cellSpacing="0" cellPadding="0" style="border-collapse:collapse;">
<tr height="25">
<TD width="10%" align="center">选择</TD>
<TD width="10%" align="center">状态</TD>
<TD width="10%" align="center">事件号</TD>
<TD width="*" align="center">事件名</TD>
</tr>

<xsl:for-each select='rule[contains(event/name, $ename)]'>
<xsl:sort select="event/id"/>
<xsl:if test="position()> $startno and position()<= $endno">
<tr>
<td align="center">
<input type='checkbox'>
<xsl:attribute name="name">viewchk_<xsl:value-of select="event/id"/></xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="event/id"/></xsl:attribute>
<xsl:attribute name="onClick">checkOVItem(<xsl:value-of select="event/id"/>)</xsl:attribute>
</input>
</td>
<xsl:choose>
<xsl:when test="enable[. = 'true']">
<td align="center">有效</td>
</xsl:when>
<xsl:otherwise>
<td align="center">禁用</td>
</xsl:otherwise>
</xsl:choose>
<td align="center"><xsl:value-of select="event/id"/></td>
<td><xsl:value-of select="event/name"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</TABLE>
</xsl:template>

</xsl:stylesheet>

http://www.goofar.com/?ID=634664011139
liuph3000 2006-01-10
  • 打赏
  • 举报
回复

<BODY onLoad="Transform()">

<table width="550" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
<tr>
<td>
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
<TR height=5><td colspan=10 style="font-size:0px;"></td></TR>
<TR height=25>
<td colspan=3 align=center>事件名包含:</td>
<td colspan=3 align=center><input type="text" value="" id="ename" size="35" maxlength="16"/></td>
<td colspan=4><input type="button" value="搜索" onClick="Transform()"/></td>
</TR>
<TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
<TR height=30>
<td width=45 align=center><b>添加</b></td>
<td width=5 align=center><font color=gray>|</font></td>
<td width=50 align=center>事件号</td>
<td width=55 align=center><input type="text" name="add_id" value="" size="5" maxlength="5" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"></td>
<td width=55 align=center>事件名</td>
<td width=* align=center><input type="text" name="add_name" maxlength="48" value=""></td>
<td width=70 align=center>是否使用</td>
<td width=30 align=center>
<input type='checkbox' name='add_state' checked>
</td>
<td width=5 align=center><font color=gray>|</font></td>
<td width=70 align=center><input type="button" name="add_btn" value="确定" onClick="protectsubmit(1)"></td>
</TR>
<TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
<TR height=30>
<td width=45 align=center><b>修改</b></td>
<td width=5 align=center><font color=gray>|</font></td>
<td width=50 align=center>事件号</td>
<td width=55 align=center>
<input type="text" name="modify_id" value="<请选择一条规则>" size="5" maxlength="5" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" disabled></td>
<td width=55 align=center>事件名</td>
<td width=* align=center>
<input type="text" name="modify_name" maxlength="48" value="<请选择一条规则>" disabled></td>
<td width=70 align=center>是否使用</td>
<td width=30 align=center>
<input type='checkbox' name='modify_state' disabled>
</td>
<td width=5 align=center><font color=gray>|</font></td>
<td width=70 align=center><input type="button" name="modify_btn" value="确定" onClick="protectsubmit(2)"></td>
</TR>
<TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
<TR height=30>
<td colspan=5 align=left class=tablefont></td>
<td align=right><input type="button" name="select_all_btn" value="全部选择" onClick="protectsubmit(4)"></td>
<td colspan=2 align=right><input type="button" name="cancel_all_btn" value="全部不选" onClick="protectsubmit(5)" disabled></td>
<td align=center></td>
<td align=center><input type="button" name="delete_btn" value="删除" onClick="protectsubmit(3)" disabled></td>
</TR>
<TR height=30><td colspan=4>规则列表</td><TD colspan=6 align=right><div id="page_info" name="page_info"/></TR>
<TR>
<TD colspan=10><div id="rule_list" name="rule_list"/></TD>
</TR>
<TR height=5><td colspan=10></td></TR>
</table>
</td>
</tr>
<tr>
</tr>
</table>

</BODY>
</HTML>

http://www.goofar.com/?ID=634664011139
liuph3000 2006-01-10
  • 打赏
  • 举报
回复
rule.hta
================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>XML Editer</TITLE>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="myApp"
BORDER="thick"
BORDERSTYLE="normal"
CAPTION="yes"
ContextMenu="yes"
ICON=""
MAXIMIZEBUTTON="yes"
MINIMIZEBUTTON="yes"
scroll="no"
selection="no"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes"
VERSION="1.0"
WINDOWSTATE="normal"
>

<style type="text/css">
</style>
</HEAD>

<script language="javascript">

// load the xml file
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
xmlDoc.load("rule.xml");

// load the xsl file
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("rule.xsl");

// create the xslt object
var xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslt.stylesheet = xslDoc;
var xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;

var checked_count = 0;
var cur_page = 1;
var total_page = 1;

function OutputDocument(number){
xslProc.addParameter("ename", number);
xslProc.addParameter("startno", (cur_page - 1)*10);
xslProc.addParameter("endno", cur_page*10);
xslProc.transform();

return xslProc.output;
}

function delete_node(node){
if( node.hasChildNodes() ) {
var kids = node.childNodes;
for(var i=0;i<kids.length;i++) {
delete_node(kids[i]);
}
}
node.parentNode.removeChild(node);
}

function delete_rule(id){
var node = xmlDoc.selectSingleNode("/rules/rule[event/id="+id+"]");
delete_node(node);
}

function modify_node(node){
node.selectSingleNode("event/id").text = modify_id.value;
node.selectSingleNode("event/name").text = modify_name.value;
if( modify_state.checked ) {
node.selectSingleNode("enable").text = "true";
} else {
node.selectSingleNode("enable").text = "false";
}
}

function modify_rule(id){
var node = xmlDoc.selectSingleNode("/rules/rule[event/id="+id+"]");
modify_node(node);
}

function add_rule(){
var id = xmlDoc.createElement("id");
id.appendChild(xmlDoc.createTextNode(add_id.value));
var name = xmlDoc.createElement("name");
name.appendChild(xmlDoc.createTextNode(add_name.value));

var event = xmlDoc.createElement("event");
event.appendChild(id);
event.appendChild(name);

var enable = xmlDoc.createElement("enable");
if( add_state.checked ) {
enable.appendChild(xmlDoc.createTextNode("true"));
} else {
enable.appendChild(xmlDoc.createTextNode("false"));
}

var rule = xmlDoc.createElement("rule");
rule.appendChild(event);
rule.appendChild(enable);

var parent = xmlDoc.selectSingleNode("/rules");
if( parent.hasChildNodes() ) {
parent.insertBefore(rule, parent.firstChild);
} else {
parent.appendChild(rule);
}
}

function gotoPage(pageno){
if( pageno < 1 ) {
cur_page = 1;
} else if( pageno >= total_page ) {
cur_page = total_page;
} else {
cur_page = pageno;
}
Transform();
}

function saveXML(){
xmlDoc.save("rule.xml");
}

function protectsubmit(val){
if( val == 1 ) { //add
if( add_id.value < 10000 || add_name.value == "" ) {
window.alert("事件号必须是5位整数且事件名不能为空");
} else if( xmlDoc.selectSingleNode("/rules/rule/event/id[. = " + add_id.value + "]") ) {
window.alert("事件号" + add_id.value + "已经存在");
} else {
add_rule();
saveXML();
Transform();
}
} else if( val == 2 ) { //modify
var id = viewTable.rows[getFirstCheckedLine()].cells[2].innerText;
if( modify_id.value < 10000 || modify_name.value == "" ) {
window.alert("事件号必须是5位整数且事件名不能为空");
} else if( id != modify_id.value && xmlDoc.selectSingleNode("/rules/rule/event/id[. = " + modify_id.value + "]") ) {
window.alert("事件号" + modify_id.value + "已经存在");
} else {
if( confirm("确认修改?") ) {
modify_rule(id);
saveXML();
Transform();
}
}
} else if( val == 3 ) { //delete
if( !confirm("确认删除?") ) {
return;
}
for( var i = 1; i < viewTable.rows.length; i++ ) {
var id = viewTable.rows[i].cells[2].innerText;
if( eval("viewchk_" + id + ".checked") == true ) {
delete_rule(id)
}
}
saveXML();
Transform();
} else if( val == 4 ) { //select all
checked_count = viewTable.rows.length - 1;
for( var i = 1; i < viewTable.rows.length; i++ ) {
var id = viewTable.rows[i].cells[2].innerText;
eval("viewchk_" + id + ".checked = true");
}
changeState();
} else if( val == 5 ) { //cancel all
checked_count = 0;
for( var i = 1; i < viewTable.rows.length; i++ ) {
var id = viewTable.rows[i].cells[2].innerText;
eval("viewchk_" + id + ".checked = false");
}
changeState();
}
}

function getFirstCheckedLine(){
for( var i = 1; i < viewTable.rows.length; i++ ) {
var id = viewTable.rows[i].cells[2].innerText;
if( eval("viewchk_" + id + ".checked") == true ) {
return i;
}
}
return 0;
}

function checkOVItem(val){
if( eval("viewchk_" + val+".checked") == true ) {
checked_count++;
} else {
checked_count--;
}
changeState();
}

function changeState(){
if( checked_count ) {
delete_btn.disabled = false;
cancel_all_btn.disabled = false;
} else {
delete_btn.disabled = true;
cancel_all_btn.disabled = true;
}
if( (checked_count + 1) == viewTable.rows.length ) {
select_all_btn.disabled = true;
} else {
select_all_btn.disabled = false;
}

if( checked_count == 1 ) {
modify_btn.disabled = false;
modify_id.disabled = false;
modify_name.disabled = false;
modify_state.disabled = false;
var id = getFirstCheckedLine();
modify_id.value = viewTable.rows(id).cells(2).innerText;
modify_name.value = viewTable.rows(id).cells(3).innerText;
if( viewTable.rows(id).cells(1).innerText == "有效" ) {
modify_state.checked = true;
} else {
modify_state.checked = false;
}
} else {
modify_btn.disabled = true;
modify_id.disabled = true;
modify_name.disabled = true;
modify_state.disabled = true;
modify_id.value="请选择一条规则";
modify_name.value="请选择一条规则";
}
}

function showPageInfo(){
if( total_item.value == 0 ) {
total_page = 1;
} else {
total_page = Math.floor((9 + parseInt(total_item.value)) / 10);
}
var txt = " 共"+total_item.value+"条记录";
var prev_page = cur_page - 1;
var next_page = parseInt(cur_page) + 1;
if( cur_page > 1 ) {
txt += " <input type='button' value='<' onClick='gotoPage(" + prev_page + ")'/>"
} else {
txt += " <input type='button' value='<' onClick='gotoPage(" + prev_page + ")' disabled/>"
}
if( cur_page < total_page ) {
txt += " <input type='button' value='>' onClick='gotoPage(" + next_page + ")'/>"
} else {
txt += " <input type='button' value='>' onClick='gotoPage(" + next_page + ")' disabled/>"
}

txt += " 第<input type='text' id='page_number' size='4' maxlength='4' value='" + cur_page + "' onBlur='gotoPage(this.value)'/>页 共" + total_page + "页";
page_info.innerHTML = txt;
// window.alert(txt);
}

function Transform(){
var txt = document.getElementById("ename").value;
var str = OutputDocument(txt);
rule_list.innerHTML = str;
checked_count = 0;
showPageInfo();
changeState();
// window.alert(str);
}
</script>


http://www.goofar.com/?ID=634664011139
ice_berg16 2006-01-09
  • 打赏
  • 举报
回复
只要是HTML就不行,HTA就可以了
mqzhuang 2006-01-09
  • 打赏
  • 举报
回复
如果用VBSCIRPT来读取是不是一样无法保存?
donghid 2006-01-08
  • 打赏
  • 举报
回复
将htm后缀改为hta不就行了.
mqzhuang 2006-01-06
  • 打赏
  • 举报
回复
回复人: ssm1226(雨中人@忙晕了) ( ) 信誉:314 2006-01-06 11:26:00 得分: 0


设置IE权限


设置哪个权限能具体点吗?
fason 2006-01-06
  • 打赏
  • 举报
回复
客户端是不会有权限的,除非换成用hta
ssm1226 2006-01-06
  • 打赏
  • 举报
回复
设置IE权限
mqzhuang 2006-01-06
  • 打赏
  • 举报
回复
我就是在本地上用javascript读取自己的xml文件。现在就一个问题,如何获得save方法的权限,谢谢各位高手了
fsdy2000 2006-01-06
  • 打赏
  • 举报
回复
可以这样:
在脚本中修改xml文档后。再用xmlhttp进行页面申请。

xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.Open("POST", "负责服务器端保存的文件(asp或jsp等)", false);
xmlhttp.setRequestHeader("Content-Type","text/xml")
xmlhttp.setRequestHeader("Content-Type","gb2312")
xmlhttp.Send("xml对象");

再用一个asp或jsp文件来将xml保存成文件。
<% Response.Expires=-1000;
var doc = Server.CreateObject("Msxml2.DOMDocument");
doc.load(Request);
doc.save("文件名");
%>


使用AJAX,实现无刷新
mqzhuang 2006-01-06
  • 打赏
  • 举报
回复
感谢楼上,我加了save方法进去,提示我没有权限。请问怎么样才能获得权限呢 ?
fsdy2000 2006-01-06
  • 打赏
  • 举报
回复
你最好不要用浏览器来执行的东西。
hta就是html应用程序。
http://www.cnitt.net/wz/Article_Print.asp?ArticleID=674
cds27 2006-01-06
  • 打赏
  • 举报
回复
无法设置权限,你只能绕过着个问题,你可以用FSO来保存。前提是,客户的IE必须允许使用FSO。

一个简单的例子:
void function SaveXMLStr() {
var File=oFSO.OpenTextFile(FileName, 2);
var XMLStr=oDOM.xml.replace("<?xml version=\"1.0\"?>", "<?xml version=\"1.0\" encoding=\""+encoding+"\"?>");
File.Write(XMLStr);
File.Close();
File=null;
}
mqzhuang 2006-01-06
  • 打赏
  • 举报
回复
回复人: fason(咖啡人生) ( ) 信誉:696 2006-01-06 11:44:00 得分: 0


客户端是不会有权限的,除非换成用hta


hta是什么东西啊?
用jsp可以实现吗?
我读取本地的文件,也涉及到客户端,服务器的问题吗?
ice_berg16 2006-01-05
  • 打赏
  • 举报
回复
修改XML数据后要记得保存,还要有相应的权限
-------------
<script language="javascript">
<!--
var xml = new ActiveXObject("Msxml2.DOMDocument");
xml.load( "test.xml" );
e = xml.selectSingleNode( "/books/book[1]");
e.setAttribute( "name", "JavaScript完全自学手册" );
xml.save("test.xml");
//-->
</script>
mqzhuang 2006-01-05
  • 打赏
  • 举报
回复
我是在本地上读取自己的文件
加载更多回复(2)

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧