详解根据xsd生成xml文档的示例代码分析

互联网 17-3-21
现在有很多的xml工具软件都能根据xsd文件书写出xml文档,.net 没有实现此方法,如是我写了几个浏览、校验、和创建xml的方法全部代码如下:
using System;  using System.Data;  using System.Configuration;  using System.Web;  using System.Web.Security;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.WebControls.WebParts;  using System.Web.UI.HtmlControls;  using System.Xml;  using System.Xml.Schema;  using System.Collections;      /// <summary>  /// ProXML 的摘要说明  /// </summary>  public class ProXml  {      public ProXml()      {          //          // TODO: 在此处添加构造函数逻辑          //      }      /// <summary>      /// 获得xsd文件路径      /// </summary>      public static string GetSchemaPath      {              get{                 return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\system\\publish.xsd";             }      }      /// <summary>      /// 获理节点      /// </summary>      /// <returns></returns>      public static System.Collections.Generic.List<XmlSchemaElement> GetDatas()      {          XmlSchemaSet xsSet = new XmlSchemaSet();          xsSet.Add("http://www.w3.org/2001/XMLSchema", GetSchemaPath);          xsSet.Compile();          XmlSchema schema = null;          foreach (XmlSchema xs in xsSet.Schemas())          {              schema = xs;          }          System.Collections.Generic.List<XmlSchemaElement> elements=new System.Collections.Generic.List<XmlSchemaElement> ();          foreach (XmlSchemaObject obj in schema.Elements.Values)          {              if (obj.GetType() == typeof(XmlSchemaElement))              {                  elements.Add((XmlSchemaElement)obj);              }            }          return elements;              }      /// <summary>      /// 添加元素      /// </summary>      /// <param name="sourceXsd"></param>      /// <param name="titles"></param>      /// <param name="sourceXml"></param>      /// <param name="sourceNd"></param>      /// <param name="values"></param>      public static   void AddElement(XmlSchemaObject sourceXsd, Hashtable titles, XmlDocument sourceXml, XmlNode sourceNd, string[] values)      {            if (sourceXsd.GetType() == typeof(XmlSchemaChoice))          {              XmlSchemaChoice choice = sourceXsd as XmlSchemaChoice;              decimal min = choice.MinOccurs;              foreach (XmlSchemaObject item in choice.Items)              {                  if (item.GetType() == typeof(XmlSchemaElement))                  {                      string name = ((XmlSchemaElement)item).Name;                      if (titles.ContainsKey(name))                      {                          XmlElement element = sourceXml.CreateElement(name);                         // element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();                          element.InnerText = values[(int)titles[name]];                          sourceNd.AppendChild(element);                      }                    }                  else                  {                      AddElement (item, titles, sourceXml, sourceNd, values);                  }                }              }          else if (sourceXsd.GetType() == typeof(XmlSchemaElement))          {              string name = ((XmlSchemaElement)sourceXsd).Name;              if (titles.ContainsKey(name))              {                  XmlElement element = sourceXml.CreateElement(name);                  element.InnerText = values[(int)titles[name]];                  sourceNd.AppendChild(element);              }            }          else if (sourceXsd.GetType() == typeof(XmlSchemaSequence))          {              foreach (XmlSchemaObject childItem in ((XmlSchemaSequence)sourceXsd).Items)              {                  if (childItem.GetType() == typeof(XmlSchemaElement))                  {                      string name = ((XmlSchemaElement)childItem).Name;                      if (titles.ContainsKey(name))                      {                          XmlElement element = sourceXml.CreateElement(name);                          element.InnerText = values[(int)titles[name]];                          sourceNd.AppendChild(element);                      }                  }                  else                  {                      AddElement(childItem, titles, sourceXml, sourceNd, values);                  }                }          }          else          {              return;          }      }     /// <summary>     /// 获得元素     /// </summary>     /// <param name="name"></param>     /// <returns></returns>      public static System.Collections.Generic.List<XmlSchemaElement> GetDataItem(string name)      {          System.Collections.Generic.List<XmlSchemaElement> arr = new System.Collections.Generic.List<XmlSchemaElement>();          XmlSchemaElement element = GetTableSchema(name);          if (element == null)          {              return null;          }          XmlSchemaComplexType complex = element.SchemaType as XmlSchemaComplexType;          XmlSchemaSequence sequence = complex.ContentTypeParticle as XmlSchemaSequence;                 foreach (XmlSchemaObject obj in sequence.Items)          {              if (obj.GetType() == typeof(XmlSchemaElement))              {                  XmlSchemaElement item = (XmlSchemaElement)obj;                  arr.Add(item);                               }              else              {                  GetItem(arr, obj);              }          }          return arr;      }      public static void GetItem(System.Collections.Generic.List<XmlSchemaElement> arr, XmlSchemaObject obj)      {          if (obj.GetType() == typeof(XmlSchemaElement))          {              XmlSchemaElement item = (XmlSchemaElement)obj;              arr.Add(item);          }          else if (obj.GetType() == typeof(XmlSchemaChoice))          {              XmlSchemaChoice choice = obj as XmlSchemaChoice;              foreach (XmlSchemaObject child in choice.Items)              {                  if (child.GetType() == typeof(XmlSchemaElement))                  {                      XmlSchemaElement item = child as XmlSchemaElement;                      arr.Add(item);                  }                  else                  {                      GetItem(arr, child);                  }              }          }          else if (obj.GetType() == typeof(XmlSchemaSequence))          {              XmlSchemaSequence sequence = obj as XmlSchemaSequence;              foreach (XmlSchemaObject child in sequence.Items)              {                  if (child.GetType() == typeof(XmlSchemaObject))                  {                      XmlSchemaElement item = child as XmlSchemaElement;                      arr.Add(item);                  }                  else                  {                      GetItem(arr, child);                  }              }          }          else          {              return;          }      }      /// <summary>      /// 根据节点名获得节点      /// </summary>      /// <param name="name"></param>      /// <returns></returns>      public static XmlSchemaElement GetTableSchema(string name)      {          XmlSchemaSet xsSet = new XmlSchemaSet();          xsSet.Add("http://www.w3.org/2001/XMLSchema", GetSchemaPath);          xsSet.Compile();          XmlSchema schema=null;          foreach (XmlSchema xs in xsSet.Schemas())          {              schema = xs;          }          XmlQualifiedName qf = new XmlQualifiedName(name, "http://www.w3.org/2001/XMLSchema");          if(schema.Elements.Contains(qf))          {              return (XmlSchemaElement)schema.Elements[qf];          }          return null;        }       static  void XmlValidation(object sendor, ValidationEventArgs e)         {             switch (e.Severity)             {                 case XmlSeverityType.Error:                     throw e.Exception;                   case XmlSeverityType.Warning:                     throw e.Exception;                 }           }    /// <summary>    /// 校验dom对象    /// </summary>    /// <param name="doc"></param>    /// <returns></returns>         public static string CheckDataXml(XmlDocument doc)         {             XmlSchemaSet xsd = new XmlSchemaSet();             xsd.Add("", GetSchemaPath);             doc.Schemas = xsd;             try             {                 doc.Validate(new ValidationEventHandler(XmlValidation));             }             catch (Exception ex)             {                 return ex.Message;             }             return null;         }  }

以上就是详解根据xsd生成xml文档的示例代码分析的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: xsd,xml
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:详解XML命名空间(XML Namespaces)介绍以及节点读取方法的示例代码

相关资讯