Saat ini, ada banyak perangkat lunak alat XML yang dapat menulis dokumen XML berdasarkan file XSD. .net tidak menerapkan metode ini jadi saya menulis beberapa metode untuk menelusuri, memverifikasi, dan membuat XML.
menggunakan Sistem;
menggunakan Sistem.Data;
menggunakan Sistem.Konfigurasi;
menggunakan Sistem.Web;
menggunakan Sistem.Web.Keamanan;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan System.Web.UI.WebControls.WebParts;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan Sistem.Xml;
menggunakan System.Xml.Schema;
menggunakan Sistem.Koleksi;
/**////
/// Ringkasan deskripsi ProXML
///
ProXml kelas publik
{
publikProXml()
{
//
// TODO: tambahkan logika konstruktor di sini
//
}
/**////
/// Dapatkan jalur file xsd
///
string statis publik GetSchemaPath
{
mendapatkan{
kembalikan HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd";
}
}
/**////
/// Dapatkan node pemrosesan
///
///
Sistem.Koleksi.Generik.Daftar statis publik
{
XmlSchemaSet xsSet = XmlSchemaSet baru();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Kompilasi();
Skema XmlSchema = null;
foreach (XmlSchema xs di xsSet.Schemas())
{
skema = xs;
}
System.Collections.Generic.List
foreach (obj XmlSchemaObject di skema.Elements.Values)
{
jika (obj.GetType() == typeof(XmlSchemaElement))
{
elemen.Tambahkan((XmlSchemaElement)obj);
}
}
elemen kembali;
}
/**////
/// Tambahkan elemen
///
///
///
///
///
///
public static void AddElement(XmlSchemaObject sourceXsd, judul Hashtable, XmlDocument sourceXml, XmlNode sourceNd, nilai string[])
{
jika (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
Pilihan XmlSchemaChoice = sourceXsd sebagai XmlSchemaChoice;
desimal min = pilihan.MinOccurs;
foreach (item XmlSchemaObject dalam pilihan.Item)
{
if (item.GetType() == typeof(XmlSchemaElement))
{
string nama = ((XmlSchemaElement)item).Nama;
if (judul.ContainsKey(nama))
{
Elemen XmlElement = sourceXml.CreateElement(nama);
// elemen.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[nama]]).Value2.ToString();
elemen.InnerText = nilai[(int)judul[nama]];
sourceNd.AppendChild(elemen);
}
}
kalau tidak
{
AddElement (item, judul, sourceXml, sourceNd, nilai);
}
}
}
lain jika (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
string nama = ((XmlSchemaElement)sourceXsd).Nama;
if (judul.ContainsKey(nama))
{
Elemen XmlElement = sourceXml.CreateElement(nama);
elemen.InnerText = nilai[(int)judul[nama]];
sourceNd.AppendChild(elemen);
}
}
lain jika (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (XmlSchemaObject childItem di ((XmlSchemaSequence)sourceXsd).Items)
{
jika (childItem.GetType() == typeof(XmlSchemaElement))
{
string nama = ((XmlSchemaElement)childItem).Nama;
if (judul.ContainsKey(nama))
{
Elemen XmlElement = sourceXml.CreateElement(nama);
elemen.InnerText = nilai[(int)judul[nama]];
sourceNd.AppendChild(elemen);
}
}
kalau tidak
{
AddElement(childItem, judul, sourceXml, sourceNd, nilai);
}
}
}
kalau tidak
{
kembali;
}
}
/**////
/// Dapatkan elemen
///
///
///
Sistem.Koleksi.Generik.Daftar statis publik
{
System.Collections.Generic.List
Elemen XmlSchemaElement = GetTableSchema(nama);
jika (elemen == nol)
{
kembalikan nol;
}
XmlSchemaComplexType complex = elemen.SchemaType sebagai XmlSchemaComplexType;
Urutan XmlSchemaSequence = kompleks.ContentTypeParticle sebagai XmlSchemaSequence;
foreach (obj XmlSchemaObject secara berurutan.Item)
{
jika (obj.GetType() == typeof(XmlSchemaElement))
{
Item XmlSchemaElement = (XmlSchemaElement)obj;
arr.Tambahkan(item);
}
kalau tidak
{
DapatkanItem(arr, obj);
}
}
kembali arr;
}
public static void GetItem(System.Collections.Generic.List
{
jika (obj.GetType() == typeof(XmlSchemaElement))
{
Item XmlSchemaElement = (XmlSchemaElement)obj;
arr.Tambahkan(item);
}
lain jika (obj.GetType() == typeof(XmlSchemaChoice))
{
Pilihan XmlSchemaChoice = objek sebagai XmlSchemaChoice;
foreach (anak XmlSchemaObject dalam pilihan.Item)
{
if (anak.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = anak sebagai XmlSchemaElement;
arr.Tambahkan(item);
}
kalau tidak
{
GetItem(arr, anak);
}
}
}
lain jika (obj.GetType() == typeof(XmlSchemaSequence))
{
Urutan XmlSchemaSequence = objek sebagai XmlSchemaSequence;
foreach (anak XmlSchemaObject secara berurutan.Item)
{
if (anak.GetType() == typeof(XmlSchemaObject))
{
XmlSchemaElement item = anak sebagai XmlSchemaElement;
arr.Tambahkan(item);
}
kalau tidak
{
GetItem(arr, anak);
}
}
}
kalau tidak
{
kembali;
}
}
/**////
/// Dapatkan node berdasarkan nama node
///
///
///
XmlSchemaElement GetTableSchema statis publik (nama string)
{
XmlSchemaSet xsSet = XmlSchemaSet baru();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Kompilasi();
Skema XmlSchema=null;
foreach (XmlSchema xs di xsSet.Schemas())
{
skema = xs;
}
XmlQualifiedName qf = XmlQualifiedName baru(nama, " http://www.w3.org/2001/XMLSchema ");
if(skema.Elemen.Berisi(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
kembalikan nol;
}
static void XmlValidation (pengirim objek, ValidationEventArgs e)
{
beralih (e.Keparahan)
{
kasus XmlSeverityType.Kesalahan:
melempar e.Exception;
case XmlSeverityType.Peringatan:
melempar e.Exception;
}
}
/**////
/// Verifikasi objek dom
///
///
///
string statis publik CheckDataXml (dokumen XmlDocument)
{
XmlSchemaSet xsd = XmlSchemaSet baru();
xsd.Tambahkan("", GetSchemaPath);
doc.Skema = xsd;
mencoba
{
doc.Validate(ValidationEventHandler baru(XmlValidation));
}
menangkap (Pengecualian ex)
{
kembalikan ex.Pesan;
}
kembalikan nol;
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html