في الوقت الحاضر، هناك العديد من برامج أدوات XML التي يمكنها كتابة مستندات XML بناءً على ملفات XSD. لا يطبق .net هذه الطريقة، لذلك كتبت عدة طرق لتصفح XML والتحقق منه، الكود بأكمله كما يلي:
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام System.Web؛
باستخدام System.Web.Security؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.WebControls.WebParts؛
باستخدام System.Web.UI.HtmlControls؛
باستخدام System.Xml؛
باستخدام System.Xml.Schema؛
باستخدام System.Collections؛
/**//// <الملخص>
/// وصف موجز لـ ProXML
/// </الملخص>
الطبقة العامة ProXml
{
publicProXml()
{
//
// TODO: أضف منطق المنشئ هنا
//
}
/**//// <الملخص>
/// احصل على مسار ملف xsd
/// </الملخص>
سلسلة ثابتة عامة GetSchemaPath
{
يحصل{
return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd";
}
}
/**//// <الملخص>
/// الحصول على عقدة المعالجة
/// </الملخص>
/// <returns></returns>
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 في xsSet.Schemas())
{
المخطط = XS;
}
System.Collections.Generic.List<XmlSchemaElement> element=new System.Collections.Generic.List<XmlSchemaElement> ();
foreach (كائن XmlSchemaObject في المخطط.Elements.Values)
{
إذا (obj.GetType() == typeof(XmlSchemaElement))
{
Elements.Add((XmlSchemaElement)obj);
}
}
عناصر العودة
}
/**//// <الملخص>
/// إضافة عنصر
/// </الملخص>
/// <param name="sourceXsd"></param>
/// <param name="titles"></param>
/// <param name="sourceXml"></param>
/// <param name="sourceNd"></param>
/// <param name="values"></param>
AddElement الفراغ الثابت العام (XmlSchemaObject sourceXsd، عناوين Hashtable، XmlDocument sourceXml، XmlNode sourceNd، قيم السلسلة [])
{
إذا (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice Choice = sourceXsd as XmlSchemaChoice;
الحد الأدنى العشري = Choice.MinOccurs;
foreach (عنصر XmlSchemaObject في الاختيار. العناصر)
{
إذا (item.GetType() == typeof(XmlSchemaElement))
{
اسم السلسلة = ((XmlSchemaElement)item).Name؛
إذا (العناوين. يحتوي على مفتاح (الاسم))
{
عنصر XmlElement = sourceXml.CreateElement(name);
// element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();
element.InnerText = value[(int)titles[name]];
sourceNd.AppendChild(element);
}
}
آخر
{
AddElement (العنصر، العناوين، sourceXml، sourceNd، القيم)؛
}
}
}
وإلا إذا (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
اسم السلسلة = ((XmlSchemaElement)sourceXsd).Name;
إذا (العناوين. يحتوي على مفتاح (الاسم))
{
عنصر XmlElement = sourceXml.CreateElement(name);
element.InnerText = value[(int)titles[name]];
sourceNd.AppendChild(element);
}
}
وإلا إذا (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (XmlSchemaObject ChildItem في ((XmlSchemaSequence)sourceXsd).العناصر)
{
إذا (childItem.GetType() == typeof(XmlSchemaElement))
{
اسم السلسلة = ((XmlSchemaElement)childItem).Name;
إذا (العناوين. يحتوي على مفتاح (الاسم))
{
عنصر XmlElement = sourceXml.CreateElement(name);
element.InnerText = value[(int)titles[name]];
sourceNd.AppendChild(element);
}
}
آخر
{
AddElement(childItem, title, sourceXml, sourceNd,values);
}
}
}
آخر
{
يعود؛
}
}
/**//// <الملخص>
/// الحصول على العناصر
/// </الملخص>
/// <param name="name"></param>
/// <returns></returns>
System.Collections.Generic.List العام الثابت<XmlSchemaElement> GetDataItem(اسم السلسلة)
{
System.Collections.Generic.List<XmlSchemaElement> arr = new System.Collections.Generic.List<XmlSchemaElement>();
XmlSchemaElement element = GetTableSchema(name);
إذا (العنصر == فارغ)
{
عودة فارغة؛
}
XmlSchemaComplexType complex = element.SchemaType كـ XmlSchemaComplexType؛
تسلسل XmlSchemaSequence = complex.ContentTypeParticle as XmlSchemaSequence؛
foreach (كائن XmlSchemaObject في التسلسل. العناصر)
{
إذا (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = (XmlSchemaElement)obj;
arr.Add(item);
}
آخر
{
GetItem(arr, obj);
}
}
العودة آر؛
}
GetItem الفراغ العام الثابت (System.Collections.Generic.List<XmlSchemaElement> arr, XmlSchemaObject obj)
{
إذا (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = (XmlSchemaElement)obj;
arr.Add(item);
}
وإلا إذا (obj.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice Choice = obj as XmlSchemaChoice;
foreach (XmlSchemaObject التابع في الاختيار. العناصر)
{
إذا (child.GetType() == typeof(XmlSchemaElement))
{
عنصر XmlSchemaElement = تابع كـ XmlSchemaElement؛
arr.Add(item);
}
آخر
{
GetItem(arr, Child);
}
}
}
وإلا إذا (obj.GetType() == typeof(XmlSchemaSequence))
{
تسلسل XmlSchemaSequence = obj as XmlSchemaSequence;
foreach (XmlSchemaObject التابع بالتسلسل. العناصر)
{
إذا (child.GetType() == typeof(XmlSchemaObject))
{
عنصر XmlSchemaElement = تابع كـ XmlSchemaElement؛
arr.Add(item);
}
آخر
{
GetItem(arr, Child);
}
}
}
آخر
{
يعود؛
}
}
/**//// <الملخص>
/// احصل على العقدة بناءً على اسم العقدة
/// </الملخص>
/// <param name="name"></param>
/// <returns></returns>
XmlSchemaElement العام الثابت GetTableSchema (اسم السلسلة)
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
XmlSchema schema=null;
foreach (XmlSchema xs في xsSet.Schemas())
{
المخطط = XS;
}
XmlQualifiedName qf = new XmlQualifiedName(name, " http://www.w3.org/2001/XMLSchema ");
إذا (schema.Elements.Contains(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
عودة فارغة
}
XmlValidation باطل ثابت (مرسل الكائن، ValidationEventArgs e)
{
التبديل (e.Severity)
{
حالة XmlSeverityType.خطأ:
رمي e.Exception؛
حالة XmlSeverityType.Warning:
رمي e.Exception؛
}
}
/**//// <الملخص>
/// التحقق من كائن dom
/// </الملخص>
/// <param name="doc"></param>
/// <returns></returns>
سلسلة ثابتة عامة CheckDataXml(XmlDocument doc)
{
XmlSchemaSet xsd = new XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Schemas = xsd;
يحاول
{
doc.Validate(new ValidationEventHandler(XmlValidation));
}
قبض (استثناء على سبيل المثال)
{
إرجاع الرسالة السابقة؛
}
عودة فارغة؛
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html