数据岛问题,高手请进

colee 2003-10-09 05:35:43
我想应用Data Island,
让一个<select>里的选择值,对应xml文件里的某节点
...全文
31 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liudong963 2003-10-11
  • 打赏
  • 举报
回复
借助moonpiazza(月下小生) 的例子给你改编,这个应该是你所要的了,不过不完美的地方就是更新select的时候,感觉select的闪烁,但愿还有更好的办法实现:

<body>
<xml id="XMLData">
<country>
<province text="Jiang Su" value="值 Jiang Su">
<city text="Nan Jing" value="值 Nan Jing">
<street text="Xin Jie Kou" value="值 Xin Jie Kou"/>
<street text="Dong Jia Xiang" value="值 Dong Jia Xiang"/>
</city>
<city text="Su Zhou" value="值 Su Zhou">
<street text="Guan Qian Jie" value="值 Guan Qian Jie" />
<street text="Re Min Lu" value="值 Re Min Lu" />
</city>
</province>
<province text="Beijing" value="值 Beijing">
<city text="Beijing" value="值 Beijing">
<street text="Xin Jie Kou" value="值 Xin Jie Kou" />
<street text="Si Huan Lu" value="值 Si Huan Lu" />
<street text="Xue Yuan Lu" value="值 Xue Yuan Lu" />
</city>
</province>
<province text="Hei Bei" value="值 Hei Bei">
<city text="Shi Jia Zhuang" value="值 Shi Jia Zhuang">
<street text="Ren Min Lu" value="值 Ren Min Lu" />
</city>
</province>
</country>
</xml>
<xml id="xslDom" src="1.xsl"></xml>
<table width = 80% border=1>
<tr>
<td width = 50% align = center>
请选择省份:
</td>
<td width = 50% align = center>
<select name=province style="width:120px"></select>
</td>
</tr>
<tr>
<td width = 50% align = center>
请选择城市:
</td>
<td width = 50% align = center>
<select name=city style="width:120px"></select>
</td>
</tr>
<tr>
<td width = 50% align = center>
请选择街道:
</td>
<td width = 50% align = center>
<select name=street style="width:120px"></select>
</td>
</tr>
</table>
</body>
<SCRIPT LANGUAGE="JavaScript">
<!--
function changeItem(obj)
{
var xmlobj=document.all.XMLData.XMLDocument;
var xslobj=document.all.xslDom.XMLDocument;
if (!xmlobj||!xslobj) return;

var name,value;
if (!obj)
{
name="province";
value="country/province";
}
else
{
name=obj.name;
value=obj.value;

if (name=="province")
{
value="country/province[@value = '"+value+"']/city";
name="city";
}
else if(name=="city")
{
value="country/province[@value = '"+document.all.item("province").value+"']/city[@value = '"+value+"']/street";
name="street";
}
else
{
return;
}
}

var SOBJ=xslobj.selectSingleNode("//select");
if(!SOBJ) return;

//设置name属性
var temp=SOBJ.selectSingleNode("./@name");
if(!temp)
{
temp=xslobj.createAttribute("name");
SOBJ.setAttributeNode(temp);
}
temp.nodeTypedValue=name;

//设置onchange属性
temp=SOBJ.selectSingleNode("./@onchange");
if(!temp)
{
temp=xslobj.createAttribute("onchange");
SOBJ.setAttributeNode(temp);
}

if(name=="province"||name=="city")
temp.nodeTypedValue="changeItem(this)";
else
temp.nodeTypedValue="";

var ForOBJ=SOBJ.selectSingleNode("xsl:for-each/@select");
if(!ForOBJ) return;

ForOBJ.nodeTypedValue=value;

document.all.item(name).outerHTML=xmlobj.transformNode(xslobj);

//采用递归算法实现级联
if(name=="province"||name=="city")
changeItem(document.all.item(name));
}

//初始化
changeItem(null);
//-->
</SCRIPT>


------------------- 1.xsl -------------------
<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<select onchange="changeItem(this)" style="width:120px">
<xsl:for-each select="country/province">
<xsl:apply-templates select="." />
</xsl:for-each>
</select>
</xsl:template>

<xsl:template match="province|city|street">
<option>
<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
<xsl:value-of select="@text"/>
</option>
</xsl:template>
</xsl:stylesheet>
xjwxiong 2003-10-10
  • 打赏
  • 举报
回复
可參考這個例子:

<OBJECT classid="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39"
ID="xmlData" HEIGHT=0 WIDTH=0>
</OBJECT>
<HTML>
<HEAD>
<TITLE>瀏覽XML文件的內容</TITLE>
<SCRIPT Language="JavaScript">
function loadXML()
{
//載入XML的文件
var xmldoc=xmlData.XMLDocument;
xmldoc.load("ch6-4.xml");

}
</SCRIPT>
</HEAD>
<BODY onload="loadXML()">
<CENTER>
<H2>瀏覽XML文件的內容</H2>
<HR>
<Table id=tblbooks datasrc="#xmlData" DATAPAGESIZE=3 border=1>
<Thead>
<TR>
<TD>書號</TD>
<TD>書名</TD>
<TD>作者</TD>
<TD>定價</TD>
</TR>
</THEAD>
<TBODY>
<TR>
<TD><DIV datafld="code"></DIV></TD>
<TD><DIV datafld="title"></DIV></TD>
<TD>
<TABLE Datasrc="#xmlData" datafld="authorlist">
<TR><TD><DIV datafld="author"></DIV></TD></TR>
</TABLE>
</TD>
<TD><DIV datafld="price"></DIV></TD>
</TR>
</TBODY>
</TABLE>
<HR>
<Input type="button" onclick="tblbooks.previousPage()" value="上一頁">
<Input type="button" onclick="tblbooks.nextPage()" value="下一頁">
每一頁<input type=Text value="3" size="5" onblur="tblbooks.dataPageSize=this.value;">
</Center>
</BODY>
</HTML>
孟子E章 2003-10-10
  • 打赏
  • 举报
回复
参考
http://msdn.microsoft.com/workshop/author/databind/dataconsumer.asp
孟子E章 2003-10-10
  • 打赏
  • 举报
回复
select只能绑定seleted值,用楼上的方法。
HONGDUN 2003-10-10
  • 打赏
  • 举报
回复
如果用“<TABLE Datasrc="#xmlData" datafld="authorlist">,难道不会一次性将数据绑定至客户端吗???
ssm1226 2003-10-10
  • 打赏
  • 举报
回复
数据绑定,无法实现你的意图

用js脚本或xsl
colee 2003-10-10
  • 打赏
  • 举报
回复

to moonpiazza(月下小生) :
你的东西不错,但好像不合我的问题,而且若有上千个选择项,速度不行;
有没有类似 “<TABLE Datasrc="#xmlData" datafld="authorlist"><TR><TD><DIV datafld="author"></DIV></TD></TR></TABLE>”这种方法将数据绑定到<select>呢 ?
请关注

to xjwxiong(xjw):
你好像有xmlHttp的教材,能不能给个网址?
月光易水 2003-10-09
  • 打赏
  • 举报
回复
多级联动菜单例子

<body onload="XMLRelatingSel(0);">

<xml id="XMLData">
<country>
<province text="Jiang Su" value="值 Jiang Su">
<city text="Nan Jing" value="值 Nan Jing">
<street text="Xin Jie Kou" value="值 Xin Jie Kou"/>
<street text="Dong Jia Xiang" value="值 Dong Jia Xiang"/>
</city>
<city text="Su Zhou" value="值 Su Zhou">
<street text="Guan Qian Jie" value="值 Guan Qian Jie" />
<street text="Re Min Lu" value="值 Re Min Lu" />
</city>
</province>
<province text="Beijing" value="值 Beijing">
<city text="Beijing" value="值 Beijing">
<street text="Xin Jie Kou" value="值 Xin Jie Kou" />
<street text="Si Huan Lu" value="值 Si Huan Lu" />
<street text="Xue Yuan Lu" value="值 Xue Yuan Lu" />
</city>
</province>
<province text="Hei Bei" value="值 Hei Bei">
<city text="Shi Jia Zhuang" value="值 Shi Jia Zhuang">
<street text="Ren Min Lu" value="值 Ren Min Lu" />
</city>
</province>
</country>
</xml>
<table width = 80% border=1>
<tr>
<td width = 50% align = center>
请选择省份:
</td>
<td width = 50% align = center>
<select name=province></select>
</td>
</tr>
<tr>
<td width = 50% align = center>
请选择城市:
</td>
<td width = 50% align = center>
<select name=city></select>
</td>
</tr>
<tr>
<td width = 50% align = center>
请选择街道:
</td>
<td width = 50% align = center>
<select name=street></select>
</td>
</tr>
</table>
</body>
<SCRIPT LANGUAGE="JavaScript">
<!--

var aSel=["province","city","street"];
function XMLRelatingSel(p_nSel)
{

var i;
var aTmpVal = new Array();
var nSel = p_nSel;

for(i=0; i<nSel; i++)
{
aTmpVal[i] = document.all(aSel[i]).options[document.all(aSel[i]).selectedIndex].value;
}

if(nSel == aSel.length)
{
var sSelVal = "";
for(i=0; i<nSel; i++)
{
sSelVal += aSel[i] + ": " + aTmpVal[i] + "\n";
}
alert(sSelVal);

return;
}



with(document.all(aSel[nSel]))
{
length = 0 ;
var oNode = XMLData.XMLDocument.childNodes[0];

for(i=0; i<nSel; i++)
{
oNode = oNode.selectSingleNode(aSel[i] + '[@value="' + aTmpVal[i] + '"]');
}

for(i=0; i<oNode.childNodes.length; i++)
{
length++ ;
options[(length-1)].text = oNode.childNodes[i].getAttribute("text");
options[(length-1)].value = oNode.childNodes[i].getAttribute("value");
}

onchange = new Function("XMLRelatingSel("+(nSel+1)+")");
onchange();
}
}

//-->
</SCRIPT>


:_)

8,906

社区成员

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

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