对XML数据岛的操作,高分求救!!

pimple 2003-12-23 12:03:25
用XMLHTTP来获取XML数据,获取后缓存到XML数据岛里(xmldata),用updateBindings()来绑定数据。
后台代码进行正常,调试时看出查询出xml字串并发去了,但安户端脚本总是报错:“缺少对象”,在
for (i=0;i<root.childNodes.length;i++)
这一行,脚本调试太麻烦了,叹

服务器后台代码:
public class XmlHttpRequestor : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlGenericControl tableRows;
protected System.Web.UI.HtmlControls.HtmlGenericControl options;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
this.Building();
} //IsPostBack

string id = Request.QueryString["id"];
string method = Request.QueryString["method"];
if (method == "getxml")
{
string xmlstr = this.GetXml(id);
Response.ContentType = "text/xml";
Response.Expires = -1;
Response.Write(xmlstr);
}
}

#region private utility methods

private void Building()
{
string name = "";
string id = "";
string company = "";
string option = "";
string tableRow = "";
int count = 1;

string xmlfile = Server.MapPath("data\\01.xml");
XmlDocument doc = new XmlDocument();
try
{

doc.Load(xmlfile);
}
catch (Exception ex)
{
Response.Write(ex.Message);
Response.End();
}

XmlNodeList nodes = doc.DocumentElement.ChildNodes;
foreach (XmlNode node in nodes)
{
foreach (XmlNode n in node.ChildNodes)
{
string nName = n.Name.ToLower();

//building table rows
if (count == 1)
{
if (nName == "address")
{
foreach (XmlNode child in n.ChildNodes)
{
tableRow += "<tr><td bgcolor=\"#CCCCCC\">" + child.Name + "</td><td><div style=\"width:100\" id=\"" + child.Name + "\"/></td></tr>";
}
}
else
{
tableRow += "<tr><td bgcolor=\"#CCCCCC\"><b>" + n.Name + "</b></td><td><div style=\"width:100\" id=\"" + n.Name + "\"/></td></tr>";
}
}

if (nName == "name")
{
name = n.InnerText;
}
else if (nName == "id")
{
id = n.InnerText;
}
else if (nName == "company")
{
company = n.InnerText;
}
} //foreach

option += "<option value=\"" + id + "\">" + name + " - " + company + "</option>";

count ++;
} //foreach

this.options.InnerHtml += option;
this.tableRows.InnerHtml += tableRow;
}

private string GetXml(string id)
{
string xmlfile = Server.MapPath("data\\01.xml");
XmlDocument doc = new XmlDocument();
try
{

doc.Load(xmlfile);
}
catch (Exception ex)
{
Response.Write(ex.Message);
Response.End();
}

string xpath = "//ContactMen[ID = " + id + "]";
XmlNode node = doc.DocumentElement.SelectSingleNode(xpath);
if (node != null)
{
return node.OuterXml;
}
else
{
return "<ContactMen><ID>No ID!</ID></ContactMen>";

}
}

#endregion

}


这是页面,请注意JS脚本!!!

<%@ Page language="c#" Codebehind="XmlHttpRequestor.aspx.cs" AutoEventWireup="false" Inherits="xml.XmlHttpRequestor" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>XmlHttpRequestor</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="javascript">
<!--
function getRequest()
{
var list = document.all.list;
if (list.selectIndex == 0)
return;
var index = list.selectedIndex;
var id = list.options[index].value;
var sUrl = "XmlHttpRequestor.aspx?method=getxml&id=" + id;
var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
oXMLHTTP.open('GET', sUrl, false);
oXMLHTTP.send();
document.all("xmldata").XMLDocument = oXMLHTTP.responseXML;
updateBindings();
}
function updateBindings()
{
var root = document.all("xmldata").XMLDocument.documentElement;
for (i=0;i<root.childNodes.length;i++)
{
var node = root.childNodes(i);
if (node.nodeType == 1)
{
try
{
document.all(node.nodeName).innerText = node.text;
}
catch (e)
{
alert("Sorry, but the selected ID was not found");
}
}
}
}
//-->
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<XML id="xmldata"></XML>
<SELECT id="list" style="Z-INDEX: 102; LEFT: 32px; POSITION: absolute; TOP: 40px" onchange="getRequest();">
<OPTION selected>请选择联系人</OPTION>
<div id="options" runat="server"></div>
</SELECT>
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 80px" cellSpacing="2"
cellPadding="3" border="1">
<div id="tableRows" runat="server"></div>
</TABLE>
</form>
</body>
</HTML>
...全文
45 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-12-24
  • 打赏
  • 举报
回复
if you did

oXMLHTTP.send();
alert(oXMLHTTP.responseText);

then you would have known the problem

add
Response.End();
to your Page_Load code:

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
this.Building();
} //IsPostBack

string id = Request.QueryString["id"];
string method = Request.QueryString["method"];
if (method == "getxml")
{
string xmlstr = this.GetXml(id);
Response.ContentType = "text/xml";
Response.Expires = -1;
Response.Write(xmlstr);
Response.End();
}
}
pimple 2003-12-24
  • 打赏
  • 举报
回复
问题已经解决,谢谢思归大侠!!!
哪里有MSXML2、XMLHTTP、XML数据岛这些东东的属性和方法文档?就像vs带的文档那样方便,书上写的一笔带过,太粗略了。
请大侠指条明路,谢谢!!
pdriver 2003-12-24
  • 打赏
  • 举报
回复
var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
oXMLHTTP.open('GET', sUrl, false);
oXMLHTTP.send();
document.all("xmldata").XMLDocument = oXMLHTTP.responseXML;
updateBindings();
}
function updateBindings()
{
var root = document.all("xmldata").XMLDocument.documentElement;
for (i=0;i<root.childNodes.length;i++)
{

我做过一个你这样的程序,也是调试了好半天,在上面的代码中,我建议你先将下面几行 每个注释掉后再调试。你先不要关注在 (另外你是用的ie 5或更高版本吧)
for (i=0;i<root.childNodes.length;i++);
var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
oXMLHTTP.open('GET', sUrl, false);
oXMLHTTP.send();
document.all("xmldata").XMLDocument = oXMLHTTP.responseXML;
updateBindings();

有什么消息再继续回复!
lanbaibai 2003-12-24
  • 打赏
  • 举报
回复
关注中
saucer 2003-12-24
  • 打赏
  • 举报
回复
try to download MSXML4 SDK, although the information there is also incomplete, but see

http://www.w3schools.com/xml/xml_data_island.asp
pimple 2003-12-24
  • 打赏
  • 举报
回复
up
saucer 2003-12-24
  • 打赏
  • 举报
回复
you also might need to do

if (method == "getxml")
{
Response.Clear();
string xmlstr = this.GetXml(id);
Response.ContentType = "text/xml";
Response.Expires = -1;
Response.Write(xmlstr);
Response.End();
}
pimple 2003-12-23
  • 打赏
  • 举报
回复
function getRequest()
{
var list = document.all.list;
if (list.selectIndex == 0)
return;
var index = list.selectedIndex;
var id = list.options[index].value;
var sUrl = "XmlHttpRequestor.aspx?method=getxml&id=" + id;
var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
oXMLHTTP.open('GET', sUrl, false);
oXMLHTTP.send();
document.all("xmldata").XMLDocument = oXMLHTTP.responseXML;
alert(oXMLHTTP.responseXML.xml);
//updateBindings();
}

思归大峡,这句alert(oXMLHTTP.responseXML.xml);显视空值,不是null,好像是空串吧.
这面是XML文件(01.xml),请大峡诊断!!!另外,这个是练习程序,所以有不正规的地方以后我会注意的,谢谢大峡的提醒!!!

<?xml version="1.0" encoding="utf-8"?>
<!--DOCTYPE ContactMenList SYSTEM "01.dtd"-->
<ContactMenList>
<ContactMen>
<Name>Miss Li</Name>
<ID>002</ID>
<Company Type="Baig">LIS com..</Company>
<Email>li@bbb.org</Email>
<Phone>(021)87654321</Phone>
<Address>
<Street>French Piry Ahool area no.66</Street>
<City>Piry</City>
<Province>Piry</Province>
</Address>
</ContactMen>
<ContactMen>
<Name>Miss. Huang</Name>
<ID>003</ID>
<Company Type="Big">New gig Company</Company>
<Email>lisss@aaa.com</Email>
<Phone>(010)89945678</Phone>
<Address>
<Street>Five street no. 11</Street>
<City>Beijing</City>
<Province>Beijing</Province>
</Address>
</ContactMen>
</ContactMenList>
pimple 2003-12-23
  • 打赏
  • 举报
回复
up
fking22 2003-12-23
  • 打赏
  • 举报
回复
估计是编码问题导致返回的xml错误,var root = document.all("xmldata").XMLDocument.documentElement;后的root是null

设置一下编码,还有msxml的版本不同也可能造成这样。
yistudio 2003-12-23
  • 打赏
  • 举报
回复
我在csdn的文档中心看到一篇有关此问题的文章,你不妨去找来看看
qianblue 2003-12-23
  • 打赏
  • 举报
回复
莫灰心
ahking 2003-12-23
  • 打赏
  • 举报
回复
学习
saucer 2003-12-23
  • 打赏
  • 举报
回复
how can we help you if you don't show your 01.xml??

1. it is a bad idea to write html code like you are doing in Building(), you can use databinding or <asp:Xml> control

2. it is a bad idea to set
<div id="options" runat="server"></div>

inside your code, why cannot make the SELECT a server control and add the option items programmatically?

<SELECT id="list" runat="server" ...

3. make sure oXMLHTTP.responseXML is a valid xml document

oXMLHTTP.send();
alert(oXMLHTTP.responseXML.xml);

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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