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编辑  收藏  举报

导航