如何根据xsd生成xml文档
这篇文章主要介绍了如何根据xsd生成xml文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
我们一直强调成都网站设计、成都做网站对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业网站建设公司不一定是大公司,创新互联建站作为专业的网络公司选择我们就是放心。
现在有很多的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; ////// ProXML 的摘要说明 /// public class ProXml { public ProXml() { // // TODO: 在此处添加构造函数逻辑 // } ////// 获得xsd文件路径 /// public static string GetSchemaPath { get{ return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\system\\publish.xsd"; } } ////// 获理节点 /// ///public static System.Collections.Generic.List 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 elements=new System.Collections.Generic.List (); foreach (XmlSchemaObject obj in schema.Elements.Values) { if (obj.GetType() == typeof(XmlSchemaElement)) { elements.Add((XmlSchemaElement)obj); } } return elements; } /// /// 添加元素 /// /// /// /// /// /// 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; } } ////// 获得元素 /// /// ///public static System.Collections.Generic.List GetDataItem(string name) { System.Collections.Generic.List arr = new System.Collections.Generic.List (); 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 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; } } /// /// 根据节点名获得节点 /// /// ///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; } } /// /// 校验dom对象 /// /// ///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文档”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!
文章题目:如何根据xsd生成xml文档
网页网址:http://scgulin.cn/article/ppcgss.html