热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

中午休息大家帮忙看看,XML文件操作问?绑顶有分!!!

我把XML数据读取到datatable中。然后用datatable.select(id&id)这样进行筛选绑定,如果id<10的话,没有问题。数据都能读出来。但如果id>
我把XML数据读取到datatable中。然后用datatable.select("id=" & id)这样进行筛选绑定,如果id<10的话,没有问题。数据都能读出来。但如果id>=10时。不能读出数据!!没想什么原因!!
   顺便提醒大家。不是传值的问题。我直接写成:datatable.select("id=10")也不行!!极郁闷中。。高手们路过支招!!!

45 个解决方案

#1


sf

#2


1:xml构十行数据吗?
2:单步调试,看看datatable中的数据.

#3


帮顶

#4


学习 关注
帮顶

#5


如果本来就没有id>10的数据,你怎么解决也是解决不了的。
你还是先看看吧。

#6


没有代码,设个断点单步调试一下

#7


调式看看你的DataTable中存的是什么

#8


帮顶,LZ还是看下数据里有id>10的没

#9


看看数据

#10


关注,帮顶下!

#11


#12


ding

#13


看看你datatable的id列是字符串还是int型的,估计是select的时候因为字段是字符串型,比较就当作字符串来比较了。

#14


准备xml的时候同时准备Schema
下面是一个简单的示例
using System;
using System.Reflection;
using System.Data;
using System.Xml;
using System.IO;
using System.Text;
class A
{
   
    public static void Main(String[] args)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("str", typeof(string));
        dt.Rows.Add(new object[] {9,"9" });
        dt.Rows.Add(new object[] { 10, "10" });
        dt.Rows.Add(new object[] { 11, "11" });


        DataSet ds = new DataSet();
        ds.Tables.Add(dt);
        //不同时写入Schema.则读取出来时因为无法分析数据格式可能导至select出错
        //ds.WriteXml("xmlfile");
        ds.WriteXml("xmlfilewithschema",XmlWriteMode.WriteSchema);
        ds.Tables.Remove(dt);

        //同时读出时也带着Schema一起读出可以有效还原数据格式
        //ds.ReadXml("xmlfile");
        ds.ReadXml("xmlfilewithschema", XmlReadMode.ReadSchema);
        dt = ds.Tables[0];
       
        PrintTable(dt,"id=10");
        PrintTable(dt, "id>10");
        PrintTable(dt, "id<10");
        
        Console.Read();
               
    }

    static void PrintTable(DataTable dt,string condition)
    {
        
        DataRow[] drs = dt.Select(condition);
        
        Console.WriteLine("条件:{0}记录数:{1}",condition ,drs.Length);
        foreach(DataRow dr in drs){
            foreach (DataColumn col in dt.Columns)
            {
                Console.Write("{0}:{1}\t",col.Caption,dr[col.Caption] );
            }
            Console.Write("\r\n");
        }
    }
}

#15


刚吃完饭回来
楼主可以调试一下进一步看看是哪的问题
是数据类型还是数据源的问题
帮顶

#16


帮顶

#17


幫頂...
XML取第10筆後的數據好像問題滿多的

#18


帮顶下!

#19


如果本来就没有id>10的数据,你怎么解决也是解决不了的。
你还是先看看吧。

#20


sf jf

#21


ding

#22


jf

#23


帮顶,顺便学习

#24


我说id>=10当然是有啊。。。其它都能读出来。为什么大于等于10以后就不行了呢!!

#25


up

#26


id>=10中的数据里面有非法值

#27


我改成int32类型。还是不行!!!!不知道怎么回事了!!

#28


顶      !!!

#29


id>=10中的数据里面有非法值
---------------------------
怎么还没明白我的意思.我是说我筛选的ID大于或者等于10以后就有问题.并没id>=10这个判断!!

#30


看来还差一点就解决了,如果楼主把源程序帖出来,说不定我就可以帮帮你了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接分

#31


using System;
using System.Data;


class A
{
   
    public static void Main(String[] args)
    {


        DataTable dt = CreateTable();
        DataSet ds = new DataSet();
        ds.Tables.Add(dt);
        ds.WriteXml("xmlfile");
        /*这时候XML文件内容为
         * 

  
    9
    9
  

  
    10
    10
  

  
    11
    11
  


         * 稍后读入到datatable时,id字段的类型为String
         */
        ds.Tables.Remove(dt);
        ds.ReadXml("xmlfile");
        dt = ds.Tables[0];
        PrintTable(dt,"id=10");
        PrintTable(dt, "id>10");
        /*这时候select id<10找不到9,实现的细节可能要看select的实现*/
        PrintTable(dt, "id<10");



        dt = CreateTable();
        ds = new DataSet();
        ds.Tables.Add(dt);
        ds.WriteXml("xmlfilewithschema", XmlWriteMode.WriteSchema);
        /*这时候XML文件内容为,看 
         * 配置节决定了id是整型
      * 

  
    
      
        
          
            
              
                
                
              

            

          
        
      

    
  
  
    9
    9
  

  
    10
    10
  

  
    11
    11
  


      * 稍后读入到datatable时,id字段的类型为int32
      */
        ds.Tables.Remove(dt);
        ds.ReadXml("xmlfilewithschema", XmlReadMode.ReadSchema);
        dt = ds.Tables[0];
        PrintTable(dt, "id=10");
        PrintTable(dt, "id>10");
        PrintTable(dt, "id<10");
        Console.Read();
               
    }

    static DataTable CreateTable() {
        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("str", typeof(string));
        dt.Rows.Add(new object[] { 9, "9" });
        dt.Rows.Add(new object[] { 10, "10" });
        dt.Rows.Add(new object[] { 11, "11" });
        return dt;
    }

    static void PrintTable(DataTable dt,string condition)
    {
        
        DataRow[] drs = dt.Select(condition);
        Console.WriteLine("条件:{0}记录数:{1}",condition ,drs.Length);
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write("{0}:{1}\t", col.Caption, col.DataType.Name);
        }
        Console.Write("\r\n");
        foreach(DataRow dr in drs){
            foreach (DataColumn col in dt.Columns)
            {
                Console.Write("{0}\t",dr[col.Caption] );
            }
            Console.Write("\r\n");
        }
    }
}
=====运行结果

条件:id=10记录数:1
id:String       str:String
10      10
条件:id>10记录数:1
id:String       str:String
11      11
条件:id<10记录数:0
id:String       str:String
条件:id=10记录数:1
id:Int32        str:String
10      10
条件:id>10记录数:1
id:Int32        str:String
11      11
条件:id<10记录数:1
id:Int32        str:String
9       9

#32


我觉得是 Console.WriteLine("条件:{0}记录数:{1}",condition ,drs.Length);的问题,drs.Length 是dtrow的长度,不是 dt 的长度

#33


mark

#34



blackant2(寻找武汉工作机会QQ17754266email:blackant@tt8.cn) ( ) 信誉:100 
辛苦了!!

源碼:
    ''' 
    ''' 根据ID,XML文件返回BBS主题
    ''' 

    ''' 
    ''' 
    ''' 
    ''' 
    Public Function getbbs(ByVal [id] As Integer, ByVal path As String) As DataView
        Dim dt As DataTable = New DataTable()

        Dim dtr As DataTable = New DataTable()
        dtr.Columns.Add("id", GetType(Int32))
        dtr.Columns.Add("content", GetType(String))
        dtr.Columns.Add("author", GetType(String))
        dtr.Columns.Add("date", GetType(String))
        dtr.Columns.Add("title", GetType(String))
        dtr.Columns.Add("new", GetType(String))       //这列是没用的.如果不添加就说我添加的列太少.内容超填充不了!!不知为何!!

        dtr.Columns.Add("ip", GetType(String))

        Dim dv As DataView = New DataView()
        Dim stream As FileStream = New FileStream(Server.MapPath(path), FileMode.Open)
        Dim doc As XmlDataDocument = New XmlDataDocument
        doc.DataSet.ReadXml(New StreamReader(stream))
        dt = doc.DataSet.Tables(0)

        Dim dr() As DataRow = dt.Select("[id]=" & [id])
        Dim i As Integer
        For i = 0 To dr.Length - 1
            dtr.Rows.Add(New Object() {dr(i).Item("id"), dr(i).Item("content").ToString, dr(i).Item("author").ToString, dr(i).Item("date").ToString, dr(i).Item("title").ToString, dr(i).Item("date").ToString, dr(i).Item("ip").ToString})
        Next
        dv = dtr.DefaultView
        stream.Close()
        Return dv
    End Function
返回一个dataview!!!大家帮忙看看!!

#35


Dim dr() As DataRow = dt.Select("[id]=" & [id])
Dim i As Integer
For i = 0 To dr.Length - 1
dtr.Rows.Add(New Object() {dr(i).Item("id"), dr(i).Item("content").ToString, dr(i).Item("author").ToString, dr(i).Item("date").ToString, dr(i).Item("title").ToString, dr(i).Item("date").ToString, dr(i).Item("ip").ToString})
Next

========
用C#写,不习惯vb
DataView dv=dt.defaultview;
for(int i=0;i    dtr.rows.add(...............);
}
dv=dtr.defaultview;
dv.rowfilter="id>10";

#36


帮顶

#37


帮顶

接分

#38


其实使用table copy to table的方法给人感觉好笨拙
另一个可行的方法是使用InferTypedSchema参数进行强类型架构推断(如果xml是良构的,一般不会抛出异常),下面也是一个示例
using System;
using System.Data;
using System.IO;
using System.Text;


class A
{
   
    public static void Main(String[] args)
    {
        string xml = @"

9
9


10
10


11
11

";
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml));
        DataSet ds = new DataSet();
        //本例中使用推断强类型架构,可以将id推断为byte,同样可以进行比较
        ds.ReadXml(ms, XmlReadMode.InferTypedSchema);
        DataTable dt = ds.Tables[0];
        PrintTable(dt, "id>10");
        PrintTable(dt, "id=10");
        PrintTable(dt, "id<10");

        Console.Read();
               
    }

   

    static void PrintTable(DataTable dt,string condition)
    {
        
        DataRow[] drs = dt.Select(condition);
        Console.WriteLine("条件:{0}记录数:{1}",condition ,drs.Length);
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write("{0}:{1}\t", col.Caption, col.DataType.Name);
        }
        Console.Write("\r\n");
        foreach(DataRow dr in drs){
            foreach (DataColumn col in dt.Columns)
            {
                Console.Write("{0}\t",dr[col.Caption] );
            }
            Console.Write("\r\n");
        }
    }
}

================运行结果
条件:id>10记录数:1
id:Byte str:Byte
11      11
条件:id=10记录数:1
id:Byte str:Byte
10      10
条件:id<10记录数:1
id:Byte str:Byte
9       9

#39


DataView dv=dt.defaultview;
for(int i=0;i    dtr.rows.add(...............);
}
dv=dtr.defaultview;
dv.rowfilter="id>10";
----------------------------------
大哥.我已经筛选一次.再筛选一下有用吗?麻烦你改个全一点,C#没事.我能看懂!多谢了!

#40


帮顶,学习

#41


直接用:dv.rowfilter="id=" & id行了!!!!!辛苦各位了!!结了吧!!

#42


关注

#43


不明白说什么, 简单的逻辑处理而已, 再不明白输出DataTable 的数据看看

#44


楼主的程序中最好不要用datarow.进行过滤,再返回table.

dataview dv=tables[0].defaultview

dv.RowFilter = "cint(id)>10";

注意数据类型的变化

#45


路过 学习下

推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
author-avatar
Scarlett_girl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有