zoukankan      html  css  js  c++  java
  • Xml与DataTable相互转换方法

    Xml文件:xmlsample.xml

    <music>
      <song>
        <artist>The Chi-lites</artist>
        <genre>Soul</genre>
        <album>A lonely man</album>
        <year>1972</year>
      </song>
      <song>
        <artist>Babyface</artist>
        <genre>R&amp;B</genre>
        <album>unknown</album>
        <year></year>
      </song>
      <song>
        <artist>Babyface</artist>
        <genre>R&amp;B</genre>
        <album>The essential babyface</album>
        <year>2001</year>
      </song>
      <song>
        <artist>Babyface</artist>
        <genre>R&amp;B</genre>
        <album>Grown and sexy</album>
        <year>2005</year>
      </song>
      <song>
        <artist>Maria Arredondo</artist>
        <genre>Pop</genre>
        <album>Not going under</album>
        <year>2004</year>
      </song>
      <song>
        <artist>Leona Lewis</artist>
        <genre>Pop</genre>
        <album>Unknown</album>
        <year>2008</year>
      </song>
      <song>
        <artist>Usher</artist>
        <genre>R&amp;B</genre>
        <album>Usher</album>
        <year>2008</year>
      </song>
      <song>
        <artist>Christina Aguilera</artist>
        <genre>Blues</genre>
        <album>Back to basics</album>
        <year>2004</year>
      </song>
      <song>
        <artist>Sting</artist>
        <genre>Pop</genre>
        <album>Shape of my heart</album>
        <year></year>
      </song>
    </music>

    代码文件:

    class Program
        {
            static void Main(string[] args)
            {
                VaildationXmlSchema();
            }
    
            // Xml结构的文件读到DataTable中
            static DataTable XmlToDataTableByFile()
            {
                string fileName = "E:\\xmlsample.xml";
                XmlDocument doc = new XmlDocument();
                doc.Load(fileName);
    
                DataTable dt = new DataTable("song");
                //以第一个元素song的子元素建立表结构
                XmlNode songNode = doc.SelectSingleNode("/music/song[1]");
                string colName;
                if (songNode != null)
                {
                    for (int i = 0; i < songNode.ChildNodes.Count; i++)
                    {
                        colName = songNode.ChildNodes.Item(i).Name;
                        dt.Columns.Add(colName);
                    }
                }
                DataSet ds = new DataSet("music");
                ds.Tables.Add(dt);
                
                //Xml所有song元素的子元素读到表song中,当然用dt也可以读。
                ds.ReadXml(fileName);
                return dt;
            }
           
            // Xml结构的字符中读到DataTable中
            static void XmlToDataTableByString()
            {
                string fileName = "E:\\xmlsample.xml";
                XmlDocument doc = new XmlDocument();
                doc.Load(fileName);
    
                DataTable dt = new DataTable("song");
                //以第一个元素song的子元素建立表结构
                XmlNode songNode = doc.SelectSingleNode("/music/song[1]");
                string colName;
                if (songNode != null)
                {
                    for (int i = 0; i < songNode.ChildNodes.Count; i++)
                    {
                        colName = songNode.ChildNodes.Item(i).Name;
                        dt.Columns.Add(colName);
                    }
                }
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
    
                //获取Xml字串
                string xmlString = doc.InnerXml;
                StringReader sr = new StringReader(xmlString);
                XmlTextReader xr = new XmlTextReader(sr);
                //Xml所有song元素的子元素读到表song中,当然用dt也可以读。
                ds.ReadXml(xr);
            }
            
            // DataTable转换成Xml结构的文本
            static void DataTableToXml()
            {
                //dt的名为song,ds的名为music
                DataTable dt = XmlToDataTableByFile();
    
                //保存Xml验证架构
                dt.WriteXmlSchema("E://xmlsample.xsd");
    
                //dt写成Xml结构
                System.IO.TextWriter tw = new System.IO.StringWriter();
                dt.WriteXml(tw);
                string xml = tw.ToString();
            }
    
            //验证Xml结构
            static void VaildationXmlSchema()
            {
                XmlSchemaSet set = new XmlSchemaSet();
                set.Add("", "E:\\xmlsample.xsd");
    
                XmlDocument doc = new XmlDocument();
                doc.Schemas = set;
    
                try
                {
                    doc.Load("E:\\xmlsample.xml");
                    doc.Validate(new ValidationEventHandler(Vaildation));
                }
                catch (Exception e)
                {
                    Console.Write(e.Message);
                }
            }
            static void Vaildation(object sender, ValidationEventArgs e)
            {
                switch (e.Severity)
                {
                    case XmlSeverityType.Error:
                        throw e.Exception;
                    case XmlSeverityType.Warning:
                        throw e.Exception;
                }
            }
        }

    生成的验证Xml文件:xmlsample.xsd

    <?xml version="1.0" standalone="yes"?>
    <xs:schema id="music" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      <xs:element name="music" msdata:IsDataSet="true" msdata:MainDataTable="song" msdata:UseCurrentLocale="true">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="song">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="artist" type="xs:string" minOccurs="0" />
                  <xs:element name="genre" type="xs:string" minOccurs="0" />
                  <xs:element name="album" type="xs:string" minOccurs="0" />
                  <xs:element name="year" type="xs:string" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  • 相关阅读:
    LinkedList源码解析
    HashMap源码解析
    HashMap和Hashtable区别
    arcgis api for js 之网络分析服务发布
    arcgis api for js 之发布要素服务
    arcis api for js 值 3.17 本地部署
    ArcGIS 产品体系结构
    layui select下拉框选项不显示
    windows10企业版2016长期服务版激活
    PHP常见的输出语句
  • 原文地址:https://www.cnblogs.com/juexin/p/2995624.html
Copyright © 2011-2022 走看看