xml解析到Dataset报错

问题描述

我需要将一xml文档解析到dataset中,遇到DuplicateNameException的报错,请问如何能将这个xml里的信息读出来。xml文件<PSISIG_CUSTOM_DESCRIPTOR><BATbouquet_id="24677"><DESCRIPTORS></DESCRIPTORS><LOOPoriginal_network_id="7340"ts_id="1017"><DESCRIPTORS><DESCRIPTORname="private_data_specifier_descriptor"data="5F0400"/><DESCRIPTORname="user_define_descriptor"data="820406"/></DESCRIPTORS></LOOP><LOOPoriginal_network_id="7340"ts_id="1014"><DESCRIPTORS><DESCRIPTORname="private_data_specifier_descriptor"data="5F0400"/><DESCRIPTORname="user_define_descriptor"data="8228057"/><DESCRIPTORname="user_define_descriptor"data="850101"/></DESCRIPTORS></LOOP></BAT><NITnetwork_id="7340"><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="4A1C00"/></DESCRIPTORS><DESCRIPTORS><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="870A01"/></DESCRIPTORS><LOOPts_id="254"original_network_id="7340"service_id="2000"><DESCRIPTORS></DESCRIPTORS></LOOP></NIT></PSISIG_CUSTOM_DESCRIPTOR>

C#的代码是这样DataSetds=newDataSet();ds.ReadXml(@"....epg.XML")//然后这里报错了

我的任务是将network_id里的内容读出来并展现。

解决方案

本帖最后由 such_beauty 于 2011-12-21 14:52:54 编辑
解决方案二:
你的xml符合xml规则吗?浏览器直接浏览你的xml看是否能解析
解决方案三:
//将xml对象内容字符串转换为DataSetpublicstaticDataSetConvertXMLToDataSet(stringxmlData){StringReaderstream=null;XmlTextReaderreader=null;try{DataSetxmlDS=newDataSet();stream=newStringReader(xmlData);//从stream装载到XmlTextReaderreader=newXmlTextReader(stream);xmlDS.ReadXml(reader);returnxmlDS;}catch(System.Exceptionex){throwex;}finally{if(reader!=null)reader.Close();}}//将xml文件转换为DataSetpublicstaticDataSetConvertXMLFileToDataSet(stringxmlFile){StringReaderstream=null;XmlTextReaderreader=null;try{XmlDocumentxmld=newXmlDocument();xmld.Load(xmlFile);DataSetxmlDS=newDataSet();stream=newStringReader(xmld.InnerXml);//从stream装载到XmlTextReaderreader=newXmlTextReader(stream);xmlDS.ReadXml(reader);//xmlDS.ReadXml(xmlFile);returnxmlDS;}catch(System.Exceptionex){throwex;}finally{if(reader!=null)reader.Close();}}//将DataSet转换为xml对象字符串publicstaticstringConvertDataSetToXML(DataSetxmlDS){MemoryStreamstream=null;XmlTextWriterwriter=null;try{stream=newMemoryStream();//从stream装载到XmlTextReaderwriter=newXmlTextWriter(stream,Encoding.Unicode);//用WriteXml方法写入文件.xmlDS.WriteXml(writer);intcount=(int)stream.Length;byte[]arr=newbyte[count];stream.Seek(0,SeekOrigin.Begin);stream.Read(arr,0,count);UnicodeEncodingutf=newUnicodeEncoding();returnutf.GetString(arr).Trim();}catch(System.Exceptionex){throwex;}finally{if(writer!=null)writer.Close();}}//将DataSet转换为xml文件publicstaticvoidConvertDataSetToXMLFile(DataSetxmlDS,stringxmlFile){MemoryStreamstream=null;XmlTextWriterwriter=null;try{stream=newMemoryStream();//从stream装载到XmlTextReaderwriter=newXmlTextWriter(stream,Encoding.Unicode);//用WriteXml方法写入文件.xmlDS.WriteXml(writer);intcount=(int)stream.Length;byte[]arr=newbyte[count];stream.Seek(0,SeekOrigin.Begin);stream.Read(arr,0,count);//返回Unicode编码的文本UnicodeEncodingutf=newUnicodeEncoding();StreamWritersw=newStreamWriter(xmlFile);sw.WriteLine("<?xmlversion="1.0"encoding="utf-8"?>");sw.WriteLine(utf.GetString(arr).Trim());sw.Close();}catch(System.Exceptionex){throwex;}finally{if(writer!=null)writer.Close();}}
解决方案四:
引用1楼net_lover的回复:

你的xml符合xml规则吗?浏览器直接浏览你的xml看是否能解析

浏览器能解析单独解析NIT表和BAT表都能成功,但是放在一起就失败了。
解决方案五:
lz,你的xml格式明显有问题:<NITnetwork_id="7340"><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="4A1C00"/></DESCRIPTORS><DESCRIPTORS><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="870A01"/></DESCRIPTORS><LOOPts_id="254"original_network_id="7340"service_id="2000"><DESCRIPTORS></DESCRIPTORS></LOOP></NIT>你自己仔细看看,明显节点不对应,浏览器根本打不开!
解决方案六:
XML有问题,第26行的节点<DESCRIPTORS>有问题,无法匹配。
解决方案七:
真对不起我的xml文件贴错了,正确的XML文件是这样的<PSISIG_CUSTOM_DESCRIPTOR><BATbouquet_id="24677"><DESCRIPTORS></DESCRIPTORS><LOOPoriginal_network_id="7340"ts_id="1017"><DESCRIPTORS><DESCRIPTORname="private_data_specifier_descriptor"data="5F0400000000"/><DESCRIPTORname="user_define_descriptor"data="820406A50080"/></DESCRIPTORS></LOOP><LOOPoriginal_network_id="7340"ts_id="101"><DESCRIPTORS><DESCRIPTORname="private_data_specifier_descriptor"data="5F0400000000"/><DESCRIPTORname="user_define_descriptor"data="821C0065000100660002006700030068000400690005006A0006006B0007"/></DESCRIPTORS></LOOP><LOOPoriginal_network_id="7340"ts_id="102"><DESCRIPTORS><DESCRIPTORname="private_data_specifier_descriptor"data="5F0400000000"/><DESCRIPTORname="user_define_descriptor"data="821800C9000800CA000900CB000A00CC000B00CD000C00CE000D"/></DESCRIPTORS></LOOP></BAT><NITnetwork_id="7340"><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="4A1C00FE00020001A00100000000000000090000000007D1D16200FFFF80"/></DESCRIPTORS><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="4A1C00FE00020002A00200000000000000090000000007D1D16200FFFF80"/></DESCRIPTORS><DESCRIPTORS><DESCRIPTORname="user_define_descriptor"data="4A1C00FE00020003A00300000000000000090000000007D1D16200FFFF80"/></DESCRIPTORS><LOOPts_id="254"original_network_id="7340"service_id="2000"><DESCRIPTORS></DESCRIPTORS></LOOP></NIT></PSISIG_CUSTOM_DESCRIPTOR>

报错是这样“无法添加名为“DESCRIPTORS”的列:此数据表中已存在同名的嵌套表。”请高人帮我查下原因。

时间: 2024-12-24 21:52:45

xml解析到Dataset报错的相关文章

config-eclipse中,添加web.xml后,tomcat报错。

问题描述 eclipse中,添加web.xml后,tomcat报错. The Tomcat server configuration at ServersTomcat v7.0 Server at localhost-config is missing. Check the server for errors. 解决方案 Tomcat v7.0 Server没启动吧

mysql-node.js解析input中文报错

问题描述 node.js解析input中文报错 通过nodejs将html页面中的表单内容插入mysql数据库.当input文本框内输入的为英文或数字时完全正确,一旦输入中文,点击提交按钮,服务端显示错误""Incorrect String Value--'现在检查,数据库所有的字符设置都已经为utf8.nodejs代码中也有req.setEncoding('utf8').表单form标签中也有accept-charset=""UTF-8"".n

eclipse-.hbm.xml 数据库映射文件报错

问题描述 .hbm.xml 数据库映射文件报错 ** <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"

struts-config.xml显示设计是报错

问题描述 报错提示:UnabletoaccessStrutsFlowViewduetoXMLandStrutsvalidationerrorsdetectedinsource.pleasemakecorrectionsandtryagain.求助,谢谢![align=center]**********************************************欢迎使用CSDN小秘书**********************************************[/alig

Tomcat解析.less文件报错

问题描述 我需要在服务器端运行.less文件,环境:Tomcat7.X.MyEclipse.并且按照搜索资料:1.在Tomcat的lib目录下放了:apache-commons-logging.jarlog4j-1.2.17.jarcommons-lang-2.6.jarjs.jarlesscss-engine-1.3.0.jarlesscss-servlet-1.3.0.jar这6个jar文件2.在web.xml中配置了:<servlet><servlet-name>less&l

java解析mib文件报错:net.percederberg.mibble.MibLoaderException: found 1 MIB loader err

问题描述 跪求大神啊错误:Exceptioninthread"main"net.percederberg.mibble.MibLoaderException:found1MIBloadererrorsatnet.percederberg.mibble.MibLoader.load(UnknownSource)atnet.percederberg.mibble.MibLoader.load(UnknownSource)代码:importjava.io.File;importjava.io

【POI】解析xls报错:java.util.zip.ZipException: error in opening zip file

今天使用POI解析XLS,报错如下: Servlet.service() for servlet [rest] in context with path [/cetBrand] threw exception [Request processing failed; nested exception is org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'd:

Spring3整合Mybatis3+mybatis-spring1.x查询报错

问题描述 Spring3整合Mybatis3+mybatis-spring1.x查询报错 我在进行Spring(V:3.2.3.RELEASE)+mybatis(V:3.2.4)+mybatis-spring(V:1.1.1)整合.有一个ClassRoom班级类: //班级id private int classId; //班级编码 private String classCode; //班级名字 private String className; //所属学院 private College

使用Myclipse生成webservice客户端,报错

问题描述 使用Myclipse生成webservice客户端,报错 使用Myclipse生成webservice客户端,import javax.xml.bind.annotation.XmlSeeAlso;报错,是少包吗?,少了哪个 包.环境:jdk1.5 (跟这个有关吗) 解决方案 一般来说不存在少包的问题,按Ctrl+Shift+o会自动导入你代码所需要的包,当然,第三方包不算,这需要手动导入 解决方案二: 你需要把报的错误详细说一下,你这样太笼统了