百分求JS操作XML写法,解决马上给分!!

xdhou 2004-09-03 11:15:22
各位老大,我想用JS遍历一棵树,根据节点状态更新一XML文件内容,代码肯请帮助:
function FindCheckedFromNode(node) {
var i = 0;
var j = 0;
var nodes = new Array();
nodes = node.getChildren();

for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];


if (cNode.getAttribute("Checked"))

var b = xmlApp.XMLDocument.selectNodes("/RolePermissionRoot/RolePermissionList");

for(var j=0;j < b.length;j++)
if (b[j].childNodes[0].childNodes[0].nodeValue == cNode.getAttribute("ID"))
b[j].childNodes[1].childNodes[0].nodeValue = "READ";

else
var b = xmlApp.XMLDocument.selectNodes("/RolePermissionRoot/RolePermissionList");
for(var j=0;j < b.length;j++)
if (b[j].childNodes[0].childNodes[0].nodeValue == cNode.getAttribute("ID"))
b[j].childNodes[1].childNodes[0].nodeValue = "";

if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}

<XML id="xmlApp">
<RolePermissionRoot>
<RolePermissionList>
<MenuID>6</MenuID>
<Rights>READ</Rights>
</RolePermissionList>
<RolePermissionList>
<MenuID>7</MenuID>
<Rights>DEL</Rights>
</RolePermissionList>
</RolePermissionRoot>
</XML>
目的,找到MenuID改掉Rights的值,谢谢
var b = xmlApp.XMLDocument.selectNodes("/RolePermissionRoot/RolePermissionList");

for(var j=0;j < b.length;j++)
if (b[j].childNodes[0].childNodes[0].nodeValue == cNode.getAttribute("ID"))
b[j].childNodes[1].childNodes[0].nodeValue = "READ";

以上一段怎么改?
...全文
416 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyskytoday 2004-09-10
  • 打赏
  • 举报
回复
to: superdullwolf(超级大笨狼,每天要自强)

可不可以把xsl换为CSS文件呀..还有在白马上加个连接(比如连接到网易)
超级大笨狼 2004-09-09
  • 打赏
  • 举报
回复
三个文件,自己看着分别存。xml,xsl,htm

<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/xsl" href="tree.xsl" ?>
<tree>
<node title="中国">
<node title="江苏">
<node title="泰州">
<node title="白马" />
</node>
<node title="徐州" />
<node title="南京" />
<node title="无锡" />
</node>
<node title="上海">
<node title="徐家汇" />
<node title="莘庄" />
<node title="中山公园" />
</node>
<node title="北京" />
<node title="四川" />
<node title="海南" />
</node>
<node title="米国">
<node title="加利福利亚" />
<node title="纽约" />
</node>
<node title="伊拉克" />
</tree>


<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="node">
<div>
<span onclick="toggle(this)" class="mark">
<xsl:choose>
<xsl:when test="count(*)>0">
─</xsl:when>
<xsl:otherwise>
·</xsl:otherwise>
</xsl:choose>
</span>
<span>
<xsl:value-of select="@title" />
</span>
</div>
<div class="indent">
<xsl:apply-templates select="./node" />
</div>
</xsl:template>
</xsl:stylesheet>





<style>
body
{
background-color: #eeeeee;
font-size:14;
}
div
{
cursor:hand;
}
div.indent
{
padding-left: 30;

}

span
{
border:1px solid;
border-color:#999999;
font-size:14;
height:18;
}
span.mark
{
width:15;
height:15;
text-align:center;
border:1px solid;
border-color:#999999;
font-size:10;
background-color:white;

}
</style>

<SCRIPT >

function toggle(s)
{
var d = s.parentElement.nextSibling;
if (d.childNodes.length > 0)
{
if (d.style.display == '')
{
d.style.display = 'none';
s.innerText = '┼';
}
else
{
d.style.display = '';
s.innerText = '─';
}
}
}

function document.onselectstart()
{
document.selection.clear();
}

var xmldoc, xsldoc;
xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.load("tree.xml");
xsldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xsldoc.load("tree.xsl");

document.write('<div id="tree">' + xmldoc.transformNode(xsldoc) + '</div>');

</SCRIPT>

xdhou 2004-09-09
  • 打赏
  • 举报
回复
up
xdhou 2004-09-08
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
要不就用getElementsTagNames寻找结点用这个的length
DeltaCat 2004-09-07
  • 打赏
  • 举报
回复
var b = xmlApp.XMLDocument.selectNodes("/RolePermissionRoot/RolePermissionList");

for(var j=0;j < b.length;j++)
if (b[j].childNodes[0].childNodes[0].text == cNode.getAttribute("ID"))
b[j].childNodes[1].childNodes[0].text = "READ";
xdhou 2004-09-07
  • 打赏
  • 举报
回复
for(var j=0;j < b.length;j++)这句就报运行时错误了
length为空或不是对象
zhmt 2004-09-07
  • 打赏
  • 举报
回复
不用这么麻烦吧?
这要用比较复杂的算法的,
而且不能用递归,我试过,递归会堆栈溢出。

要是能直接选节点的话,建议你直接选节点。
  • 打赏
  • 举报
回复
b[j].childNodes[1].childNodes[0].nodeValue = "READ";
这句的问题是跟你的XML不匹配的
你这个是子接点的第二个接点的第一个接点的值
而且你的问题还有attributes是第一个XML的值其设置声变量传递过来的
其实你只有子接点下的两个接点用b[j].childNodes[1].text="READ"就好了
  • 打赏
  • 举报
回复
坏了,都忘了这个贴子了
flyskytoday 2004-09-07
  • 打赏
  • 举报
回复
做个好人吧:)
xdhou 2004-09-06
  • 打赏
  • 举报
回复
liuxiaoyi666(兔子)
你不是已经知道问题了吗?怎么没下文了?麻烦看一下好吧,谢谢!!!!
xdhou 2004-09-06
  • 打赏
  • 举报
回复
UP
xdhou 2004-09-05
  • 打赏
  • 举报
回复
up
xdhou 2004-09-03
  • 打赏
  • 举报
回复
再推一下
dout 2004-09-03
  • 打赏
  • 举报
回复
关注
xdhou 2004-09-03
  • 打赏
  • 举报
回复
自己往上推,不信没人来
  • 打赏
  • 举报
回复
知道问题了…………稍等,回答了一天的问题,从图形学到ASP到XML,脑袋疼了,回头给你写
xdhou 2004-09-03
  • 打赏
  • 举报
回复
一天都没人解决,失落感倍增
xdhou 2004-09-03
  • 打赏
  • 举报
回复
UP到花儿也谢了

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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