js操作 因包含null值列的DataSet 所返回的"列丢失"的xml文档
查询数据时
可能会有NULL值
直接用ds.GetXml()得到并返回xml文档字串时
会出现Null值列 没有出现在xml文档中
这样 按默认的每行有x列的方法
去操作该xml文档对象时
可能会出现少列现象
对于上面提到的Null值列丢失
目前个人还没有找到合适的解决方法
所以只有通过其他方法
来确保js操作这些数据时
能够识别出是否某行包含某列
如果有 则正常操作 如果没有 以空处理
思路如下:
1.从DataSet生成xml时 不只生成数据 并生成Schema
2.在前台js操作时
先分开Schema及数据
3.依据Schema中的列值的描述
和相关数据行 进行每一个字段的值的操作
==========================================
//后台得到并返回DataSet/DataTable的xml字串
string strXML = "";
using (StringWriter writer = new StringWriter())
{
myds.WriteXml(writer, XmlWriteMode.WriteSchema);
strXML = writer.ToString();
}
return strXML;
//前台JS处理返回的字串
//查询结果显示
function fn_QueryResult(result)
{
var splitpoint1 = result.indexOf("<xs:schema ");
var splitpoint2 = result.indexOf("<Table1>");
var str1 = result.substring(splitpoint1,splitpoint2);
var str2 = result.replace(str1,"");
var splitpoint3 = str1.indexOf("<xs:sequence>");
var splitpoint4 = str1.indexOf("</xs:complexType>");
var str_xmlData =str2;
var str_xmlField =str1.substring(splitpoint3,splitpoint4);
str_xmlField = replace(str_xmlField,"xs:","");//去掉关键字
//
var xmlData = new ActiveXObject("MSXML2.DOMDocument");
xmlData.loadXML(str_xmlData);
var xmlField= new ActiveXObject("MSXML2.DOMDocument");
xmlField.loadXML(str_xmlField);
rowNum = xmlData.documentElement.childNodes.length;//行数 以数据为准
colNum = xmlField.childNodes[0].childNodes.length;//列数 以schema为准
for(var j=0;j<rowNum;j++)//行循环
{
var rowObj=xmlData.documentElement.childNodes[j];
for(var i =0; i< colNum; i++)//列循环
{
var FieldName = xmlField.childNodes[0].childNodes[i].getAttribute("name");
var FieldObj = rowObj.selectSingleNode(""+FieldName+"");
if(FieldObj==null)
{
alert("");
}
else
{
alert(FieldObj.text);
}
}
}
}
posted on 2007-09-10 08:25 freeliver54 阅读(938) 评论(0) 编辑 收藏 举报