zoukankan      html  css  js  c++  java
  • 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);
                        }
                    }                    
                 } 
    }

  • 相关阅读:
    BZOJ-1016 最小生成树计数
    BZOJ-1003 物流运输
    BZOJ-1009 GT考试
    【NOIP2014】伤感·伤感·伤感
    BZOJ-1033 杀蚂蚁
    NOIP一系列模拟赛小结
    2014·NOIP 新的历程,新的开始
    35. Search Insert Position
    29. Divide Two Integers
    28. Implement strStr()
  • 原文地址:https://www.cnblogs.com/freeliver54/p/887951.html
Copyright © 2011-2022 走看看