本帖最后由 such_beauty 于 2011-12-21 14:52:54 编辑

解决方案 »

  1.   

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

  2.   

    //将xml对象内容字符串转换为DataSet
            public static DataSet ConvertXMLToDataSet(string xmlData)
            {
                StringReader stream = null;
                XmlTextReader reader = null;
                try
                {
                    DataSet xmlDS = new DataSet();
                    stream = new StringReader(xmlData);
                    //从stream装载到XmlTextReader
                    reader = new XmlTextReader(stream);
                    xmlDS.ReadXml(reader);
                    return xmlDS;
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (reader != null)
                        reader.Close();
                }
            }
            //将xml文件转换为DataSet
            public static DataSet ConvertXMLFileToDataSet(string xmlFile)
            {
                StringReader stream = null;
                XmlTextReader reader = null;
                try
                {
                    XmlDocument xmld = new XmlDocument();
                    xmld.Load(xmlFile);
                    DataSet xmlDS = new DataSet();
                    stream = new StringReader(xmld.InnerXml);
                    //从stream装载到XmlTextReader
                    reader = new XmlTextReader(stream);
                    xmlDS.ReadXml(reader);
                    //xmlDS.ReadXml(xmlFile);
                    return xmlDS;
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (reader != null)
                        reader.Close();
                }
            }
            //将DataSet转换为xml对象字符串
            public static string ConvertDataSetToXML(DataSet xmlDS)
            {
                MemoryStream stream = null;
                XmlTextWriter writer = null;
                try
                {
                    stream = new MemoryStream();
                    //从stream装载到XmlTextReader
                    writer = new XmlTextWriter(stream, Encoding.Unicode);
                    //用WriteXml方法写入文件.
                    xmlDS.WriteXml(writer);
                    int count = (int)stream.Length;
                    byte[] arr = new byte[count];
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.Read(arr, 0, count);
                    UnicodeEncoding utf = new UnicodeEncoding();
                    return utf.GetString(arr).Trim();
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (writer != null)
                        writer.Close();
                }
            }
            //将DataSet转换为xml文件
            public static void ConvertDataSetToXMLFile(DataSet xmlDS, string xmlFile)
            {
                MemoryStream stream = null;
                XmlTextWriter writer = null;
                try
                {
                    stream = new MemoryStream();
                    //从stream装载到XmlTextReader
                    writer = new XmlTextWriter(stream, Encoding.Unicode);
                    //用WriteXml方法写入文件.
                    xmlDS.WriteXml(writer);
                    int count = (int)stream.Length;
                    byte[] arr = new byte[count];
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.Read(arr, 0, count);
                    //返回Unicode编码的文本
                    UnicodeEncoding utf = new UnicodeEncoding();
                    StreamWriter sw = new StreamWriter(xmlFile);
                    sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                    sw.WriteLine(utf.GetString(arr).Trim());
                    sw.Close();
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (writer != null)
                        writer.Close();
                }
            }
      

  3.   


    浏览器能解析 单独解析NIT表和BAT表都能成功,但是放在一起就失败了。
      

  4.   

    lz,你的xml格式明显有问题:
         <NIT network_id="7340">
                 <DESCRIPTORS>
               <DESCRIPTOR name = "user_define_descriptor" data = "4A1C00" />
                 </DESCRIPTORS>
                 <DESCRIPTORS>
                 <DESCRIPTORS>
               <DESCRIPTOR name = "user_define_descriptor" data = "870A01" />
                 </DESCRIPTORS>      <LOOP ts_id = "254" original_network_id = "7340" service_id="2000">
                    <DESCRIPTORS>
      </DESCRIPTORS>           
          </LOOP>
         </NIT>
    你自己仔细看看,明显节点不对应,浏览器根本打不开!
      

  5.   

    XML有问题,第26行的节点<DESCRIPTORS>有问题,无法匹配。
      

  6.   

    真对不起 我的xml文件贴错了,正确的XML文件是这样的 <PSISIG_CUSTOM_DESCRIPTOR>
    <BAT bouquet_id = "24677" >
    <DESCRIPTORS>
    </DESCRIPTORS>
    <LOOP original_network_id = "7340" ts_id = "1017" >
    <DESCRIPTORS>
    <DESCRIPTOR name = "private_data_specifier_descriptor" data = "5F0400000000" />
    <DESCRIPTOR name = "user_define_descriptor" data = "820406A50080" />
    </DESCRIPTORS>
    </LOOP>
    <LOOP original_network_id = "7340" ts_id = "101" >
    <DESCRIPTORS>
    <DESCRIPTOR name = "private_data_specifier_descriptor" data = "5F0400000000" />
    <DESCRIPTOR name = "user_define_descriptor" data = "821C0065000100660002006700030068000400690005006A0006006B0007" />
    </DESCRIPTORS>
    </LOOP>
    <LOOP original_network_id = "7340" ts_id = "102" >
    <DESCRIPTORS>
    <DESCRIPTOR name = "private_data_specifier_descriptor" data = "5F0400000000" />
    <DESCRIPTOR name = "user_define_descriptor" 
                                                data ="821800C9000800CA000900CB000A00CC000B00CD000C00CE000D" />
    </DESCRIPTORS>
    </LOOP>

    </BAT>
         <NIT network_id="7340">
                 <DESCRIPTORS>
               <DESCRIPTOR name = "user_define_descriptor" data = "4A1C00FE00020001A00100000000000000090000000007D1D16200FFFF80" />
                 </DESCRIPTORS>
                 <DESCRIPTORS>
               <DESCRIPTOR name = "user_define_descriptor" data = "4A1C00FE00020002A00200000000000000090000000007D1D16200FFFF80" />
                 </DESCRIPTORS>
                  <DESCRIPTORS>
               <DESCRIPTOR name = "user_define_descriptor" data = "4A1C00FE00020003A00300000000000000090000000007D1D16200FFFF80" />
                 </DESCRIPTORS>
          <LOOP ts_id = "254" original_network_id = "7340" service_id="2000">
                    <DESCRIPTORS>
      </DESCRIPTORS>           
          </LOOP>
         </NIT>
    </PSISIG_CUSTOM_DESCRIPTOR>报错是这样“无法添加名为“DESCRIPTORS”的列: 此数据表中已存在同名的嵌套表。” 请高人帮我查下原因。