您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何根據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; /// <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文檔”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。