De nos jours, il existe de nombreux logiciels d'outils XML capables d'écrire des documents XML basés sur des fichiers XSD. J'ai donc écrit plusieurs méthodes pour parcourir, vérifier et créer du XML. L'intégralité du code est la suivante :
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Xml ;
en utilisant System.Xml.Schema ;
en utilisant System.Collections ;
/**//// <résumé>
/// Description récapitulative de ProXML
/// </summary>
classe publique ProXml
{
publicProXml()
{
//
// TODO : ajouter la logique du constructeur ici
//
}
/**//// <résumé>
/// Récupère le chemin du fichier XSD
/// </summary>
chaîne statique publique GetSchemaPath
{
obtenir{
return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd" ;
}
}
/**//// <résumé>
/// Obtention du nœud de traitement
/// </summary>
/// <retours></retours>
public static System.Collections.Generic.List<XmlSchemaElement> GetDatas()
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Schéma XmlSchema = nul ;
foreach (XmlSchema xs dans xsSet.Schemas())
{
schéma = xs ;
}
System.Collections.Generic.List<XmlSchemaElement> elements=new System.Collections.Generic.List<XmlSchemaElement> ();
foreach (obj XmlSchemaObject dans schema.Elements.Values)
{
si (obj.GetType() == typeof(XmlSchemaElement))
{
elements.Add((XmlSchemaElement)obj);
}
}
renvoyer des éléments ;
}
/**//// <résumé>
/// Ajouter un élément
/// </summary>
/// <param name="sourceXsd"></param>
/// <param name="titres"></param>
/// <param name="sourceXml"></param>
/// <param name="sourceNd"></param>
/// <param name="valeurs"></param>
public static void AddElement (XmlSchemaObject sourceXsd, titres de table de hachage, XmlDocument sourceXml, XmlNode sourceNd, valeurs string[])
{
if (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
Choix XmlSchemaChoice = sourceXsd comme XmlSchemaChoice ;
décimal min = choix.MinOccurs;
foreach (élément XmlSchemaObject dans Choice.Items)
{
si (item.GetType() == typeof(XmlSchemaElement))
{
nom de chaîne = ((XmlSchemaElement)item).Name;
si (titres.ContainsKey(nom))
{
Élément XmlElement = sourceXml.CreateElement(nom);
// element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();
element.InnerText = valeurs[(int)titres[nom]];
sourceNd.AppendChild(élément);
}
}
autre
{
AddElement (élément, titres, sourceXml, sourceNd, valeurs) ;
}
}
}
sinon si (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
nom de chaîne = ((XmlSchemaElement)sourceXsd).Name;
si (titres.ContainsKey(nom))
{
Élément XmlElement = sourceXml.CreateElement(nom);
element.InnerText = valeurs[(int)titres[nom]];
sourceNd.AppendChild(élément);
}
}
sinon si (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (XmlSchemaObject childItem dans ((XmlSchemaSequence)sourceXsd).Items)
{
if (childItem.GetType() == typeof(XmlSchemaElement))
{
nom de chaîne = ((XmlSchemaElement)childItem).Name;
si (titres.ContainsKey(nom))
{
Élément XmlElement = sourceXml.CreateElement(nom);
element.InnerText = valeurs[(int)titres[nom]];
sourceNd.AppendChild(élément);
}
}
autre
{
AddElement (childItem, titres, sourceXml, sourceNd, valeurs) ;
}
}
}
autre
{
retour;
}
}
/**//// <résumé>
/// Récupère les éléments
/// </summary>
/// <param name="nom"></param>
/// <retours></retours>
public static System.Collections.Generic.List<XmlSchemaElement> GetDataItem (nom de chaîne)
{
System.Collections.Generic.List<XmlSchemaElement> arr = new System.Collections.Generic.List<XmlSchemaElement>();
Élément XmlSchemaElement = GetTableSchema(nom);
si (élément == nul)
{
renvoie null ;
}
Complexe XmlSchemaComplexType = element.SchemaType as XmlSchemaComplexType ;
Séquence XmlSchemaSequence = complexe.ContentTypeParticle as XmlSchemaSequence ;
foreach (obj XmlSchemaObject dans séquence.Items)
{
si (obj.GetType() == typeof(XmlSchemaElement))
{
Élément XmlSchemaElement = (XmlSchemaElement)obj ;
arr.Add(article);
}
autre
{
GetItem(arr, obj);
}
}
retour arr;
}
public static void GetItem(System.Collections.Generic.List<XmlSchemaElement> arr, XmlSchemaObject obj)
{
si (obj.GetType() == typeof(XmlSchemaElement))
{
Élément XmlSchemaElement = (XmlSchemaElement)obj ;
arr.Add(article);
}
sinon si (obj.GetType() == typeof(XmlSchemaChoice))
{
Choix XmlSchemaChoice = obj comme XmlSchemaChoice ;
foreach (enfant XmlSchemaObject dans Choice.Items)
{
if (child.GetType() == typeof(XmlSchemaElement))
{
Élément XmlSchemaElement = enfant en tant que XmlSchemaElement ;
arr.Add(article);
}
autre
{
GetItem(arr, enfant);
}
}
}
sinon si (obj.GetType() == typeof(XmlSchemaSequence))
{
Séquence XmlSchemaSequence = obj en tant que XmlSchemaSequence ;
foreach (enfant XmlSchemaObject dans séquence.Items)
{
if (child.GetType() == typeof(XmlSchemaObject))
{
Élément XmlSchemaElement = enfant en tant que XmlSchemaElement ;
arr.Add(article);
}
autre
{
GetItem(arr, enfant);
}
}
}
autre
{
retour;
}
}
/**//// <résumé>
/// Récupère le nœud en fonction du nom du nœud
/// </summary>
/// <param name="nom"></param>
/// <retours></retours>
public statique XmlSchemaElement GetTableSchema (nom de chaîne)
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Schéma XmlSchema=null ;
foreach (XmlSchema xs dans xsSet.Schemas())
{
schéma = xs ;
}
XmlQualifiedName qf = new XmlQualifiedName(name, " http://www.w3.org/2001/XMLSchema ");
si (schéma.Elements.Contains (qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
renvoie nul ;
}
static void XmlValidation (expéditeur de l'objet, ValidationEventArgs e)
{
commutateur (e.Severity)
{
cas XmlSeverityType.Error :
lancer e.Exception ;
cas XmlSeverityType.Warning :
lancer e.Exception ;
}
}
/**//// <résumé>
/// Vérifier l'objet dom
/// </summary>
/// <param name="doc"></param>
/// <retours></retours>
chaîne statique publique CheckDataXml (doc XmlDocument)
{
XmlSchemaSet xsd = new XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Schemas = xsd;
essayer
{
doc.Validate(new ValidationEventHandler(XmlValidation));
}
attraper (Exception ex)
{
renvoyer un ex.Message ;
}
renvoie null ;
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html