요즘에는 XSD 파일을 기반으로 XML 문서를 작성할 수 있는 XML 도구 소프트웨어가 많이 있습니다. 따라서 .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에 대한 요약 설명
/// </summary>
공개 클래스 ProXml
{
공개ProXml()
{
//
// TODO: 여기에 생성자 논리를 추가합니다.
//
}
/**//// <요약>
/// xsd 파일 경로 가져오기
/// </summary>
공개 정적 문자열 GetSchemaPath
{
얻다{
return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd";
}
}
/**//// <요약>
/// 처리 노드 획득
/// </summary>
/// <반환></반환>
공개 정적 System.Collections.Generic.List<XmlSchemaElement> GetDatas()
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.컴파일();
XmlSchema 스키마 = null;
foreach(xsSet.Schemas()의 XmlSchema xs)
{
스키마 = xs;
}
System.Collections.Generic.List<XmlSchemaElement> 요소=새 System.Collections.Generic.List<XmlSchemaElement> ();
foreach(schema.Elements.Values의 XmlSchemaObject obj)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
elements.Add((XmlSchemaElement)obj);
}
}
요소를 반환합니다.
}
/**//// <요약>
/// 요소 추가
/// </summary>
/// <param name="sourceXsd"></param>
/// <param name="titles"></param>
/// <param name="sourceXml"></param>
/// <param name="sourceNd"></param>
/// <param name="값"></param>
공개 정적 무효 AddElement(XmlSchemaObject sourceXsd, Hashtable 제목, XmlDocument sourceXml, XmlNode sourceNd, string[] 값)
{
if (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice 선택 = XmlSchemaChoice로서의 sourceXsd;
십진수 최소값 = 선택.MinOccurs;
foreach(선택 항목의 XmlSchemaObject 항목.Items)
{
if (item.GetType() == typeof(XmlSchemaElement))
{
문자열 이름 = ((XmlSchemaElement)item).Name;
if (titles.ContainsKey(이름))
{
XmlElement 요소 = sourceXml.CreateElement(이름);
// element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();
element.InnerText = 값[(int)titles[이름]];
sourceNd.AppendChild(요소);
}
}
또 다른
{
AddElement(항목, 제목, sourceXml, sourceNd, 값);
}
}
}
else if (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
문자열 이름 = ((XmlSchemaElement)sourceXsd).Name;
if (titles.ContainsKey(이름))
{
XmlElement 요소 = sourceXml.CreateElement(이름);
element.InnerText = 값[(int)titles[이름]];
sourceNd.AppendChild(요소);
}
}
else if (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach((XmlSchemaSequence)sourceXsd).Items의 XmlSchemaObject 하위 항목)
{
if (childItem.GetType() == typeof(XmlSchemaElement))
{
문자열 이름 = ((XmlSchemaElement)childItem).Name;
if (titles.ContainsKey(이름))
{
XmlElement 요소 = sourceXml.CreateElement(이름);
element.InnerText = 값[(int)titles[이름]];
sourceNd.AppendChild(요소);
}
}
또 다른
{
AddElement(childItem, titles, sourceXml, sourceNd, value);
}
}
}
또 다른
{
반품;
}
}
/**//// <요약>
/// 요소 가져오기
/// </summary>
/// <param name="이름"></param>
/// <반환></반환>
공개 정적 System.Collections.Generic.List<XmlSchemaElement> GetDataItem(문자열 이름)
{
System.Collections.Generic.List<XmlSchemaElement> arr = new System.Collections.Generic.List<XmlSchemaElement>();
XmlSchemaElement 요소 = GetTableSchema(이름);
if (요소 == null)
{
null을 반환;
}
XmlSchemaComplexType complex = element.SchemaType을 XmlSchemaComplexType으로;
XmlSchemaSequence 시퀀스 = complex.ContentTypeParticle as XmlSchemaSequence;
foreach(시퀀스.항목의 XmlSchemaObject obj)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement 항목 = (XmlSchemaElement)obj;
arr.Add(항목);
}
또 다른
{
GetItem(arr, obj);
}
}
반환 도착;
}
공개 정적 무효 GetItem(System.Collections.Generic.List<XmlSchemaElement> arr, XmlSchemaObject obj)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement 항목 = (XmlSchemaElement)obj;
arr.Add(항목);
}
else if(obj.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice 선택 = XmlSchemaChoice로서의 obj;
foreach(choice.Items의 XmlSchemaObject 하위)
{
if (child.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement 항목 = XmlSchemaElement로서의 하위 항목;
arr.Add(항목);
}
또 다른
{
GetItem(arr, child);
}
}
}
else if (obj.GetType() == typeof(XmlSchemaSequence))
{
XmlSchemaSequence 시퀀스 = XmlSchemaSequence로서의 obj;
foreach(sequence.Items의 XmlSchemaObject 하위)
{
if (child.GetType() == typeof(XmlSchemaObject))
{
XmlSchemaElement 항목 = XmlSchemaElement로서의 하위 항목;
arr.Add(항목);
}
또 다른
{
GetItem(arr, child);
}
}
}
또 다른
{
반품;
}
}
/**//// <요약>
/// 노드 이름을 기반으로 노드를 가져옵니다.
/// </summary>
/// <param name="이름"></param>
/// <반환></반환>
public static XmlSchemaElement GetTableSchema(문자열 이름)
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.컴파일();
XmlSchema 스키마=null;
foreach(xsSet.Schemas()의 XmlSchema xs)
{
스키마 = xs;
}
XmlQualifiedName qf = new XmlQualifiedName(이름, " http://www.w3.org/2001/XMLSchema ");
if(schema.Elements.Contains(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
null을 반환
}
static void XmlValidation(개체 전송자, ValidationEventArgs e)
{
스위치(e.심각도)
{
케이스 XmlSeverityType.Error:
e.Exception 발생;
케이스 XmlSeverityType.Warning:
e.Exception을 발생시킵니다.
}
}
/**//// <요약>
/// DOM 객체 확인
/// </summary>
/// <param name="doc"></param>
/// <반환></반환>
공개 정적 문자열 CheckDataXml(XmlDocument doc)
{
XmlSchemaSet xsd = new XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Schemas = xsd;
노력하다
{
doc.Validate(new ValidationEventHandler(XmlValidation));
}
잡기 (예외예외)
{
ex.메시지를 반환합니다.
}
null을 반환;
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html