Hoje em dia, existem muitos softwares de ferramentas XML que podem escrever documentos XML com base em arquivos XSD. O .net não implementa esse método. Então, escrevi vários métodos para navegar, verificar e criar XML.
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando System.Xml;
usando System.Xml.Schema;
usando System.Collections;
/**////
/// Descrição resumida do ProXML
///
classe pública ProXml
{
publicProXml()
{
//
// TODO: adicione a lógica do construtor aqui
//
}
/**////
/// Obtém o caminho do arquivo xsd
///
string estática pública GetSchemaPath
{
pegar{
retornar HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd";
}
}
/**////
/// Obtém o nó de processamento
///
///
public static System.Collections.Generic.List
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Esquema XmlSchema = null;
foreach (XmlSchema xs em xsSet.Schemas())
{
esquema = xs;
}
System.Collections.Generic.List
foreach (obj XmlSchemaObject em esquema.Elements.Values)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
elementos.Add((XmlSchemaElement)obj);
}
}
elementos de retorno;
}
/**////
/// Adicionar elemento
///
///
///
///
///
///
public static void AddElement (XmlSchemaObject sourceXsd, títulos Hashtable, XmlDocument sourceXml, XmlNode sourceNd, valores string[])
{
if (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice escolha = sourceXsd as XmlSchemaChoice;
decimal min = escolha.MinOccurs;
foreach (item XmlSchemaObject em escolha.Items)
{
if (item.GetType() == typeof(XmlSchemaElement))
{
string nome = ((XmlSchemaElement)item).Nome;
if (títulos.ContainsKey(nome))
{
Elemento XmlElement = sourceXml.CreateElement(nome);
//elemento.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[nome]]).Value2.ToString();
element.InnerText = valores[(int)títulos[nome]];
sourceNd.AppendChild(elemento);
}
}
outro
{
AddElement (item, títulos, sourceXml, sourceNd, valores);
}
}
}
senão if (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
string nome = ((XmlSchemaElement)sourceXsd).Name;
if (títulos.ContainsKey(nome))
{
Elemento XmlElement = sourceXml.CreateElement(nome);
element.InnerText = valores[(int)títulos[nome]];
sourceNd.AppendChild(elemento);
}
}
senão if (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (XmlSchemaObject childItem em ((XmlSchemaSequence)sourceXsd).Items)
{
if (childItem.GetType() == typeof(XmlSchemaElement))
{
string nome = ((XmlSchemaElement)childItem).Nome;
if (títulos.ContainsKey(nome))
{
Elemento XmlElement = sourceXml.CreateElement(nome);
element.InnerText = valores[(int)títulos[nome]];
sourceNd.AppendChild(elemento);
}
}
outro
{
AddElement(childItem, títulos, sourceXml, sourceNd, valores);
}
}
}
outro
{
retornar;
}
}
/**////
/// Obtém elementos
///
///
///
public static System.Collections.Generic.List
{
System.Collections.Generic.List
Elemento XmlSchemaElement = GetTableSchema(nome);
if (elemento == nulo)
{
retornar nulo;
}
Complexo XmlSchemaComplexType = element.SchemaType as XmlSchemaComplexType;
Sequência XmlSchemaSequence = complex.ContentTypeParticle as XmlSchemaSequence;
foreach (obj XmlSchemaObject em sequencia.Items)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = (XmlSchemaElement)obj;
arr.Adicionar(item);
}
outro
{
GetItem(arr, obj);
}
}
retornar chegada;
}
public static void GetItem (System.Collections.Generic.List
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = (XmlSchemaElement)obj;
arr.Adicionar(item);
}
senão if (obj.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice escolha = obj as XmlSchemaChoice;
foreach (filho XmlSchemaObject em escolha.Items)
{
if (child.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = filho como XmlSchemaElement;
arr.Adicionar(item);
}
outro
{
GetItem(arr, filho);
}
}
}
senão if (obj.GetType() == typeof(XmlSchemaSequence))
{
Sequência XmlSchemaSequence = obj as XmlSchemaSequence;
foreach (filho XmlSchemaObject em sequencia.Items)
{
if (child.GetType() == typeof(XmlSchemaObject))
{
XmlSchemaElement item = filho como XmlSchemaElement;
arr.Adicionar(item);
}
outro
{
GetItem(arr, filho);
}
}
}
outro
{
retornar;
}
}
/**////
/// Obtenha o nó com base no nome do nó
///
///
///
público estático XmlSchemaElement GetTableSchema (nome da string)
{
XmlSchemaSet xsSet = new XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Esquema XmlSchema = null;
foreach (XmlSchema xs em xsSet.Schemas())
{
esquema = xs;
}
XmlQualifiedName qf = new XmlQualifiedName(nome, " http://www.w3.org/2001/XMLSchema ");
if(esquema.Elements.Contains(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
retornar nulo
;
static void XmlValidation (objeto remetente, ValidationEventArgs e)
{
interruptor (por exemplo, gravidade)
{
caso XmlSeverityType.Error:
lançar e.Exception;
caso XmlSeverityType.Warning:
lançar e.Exception;
}
}
/**////
/// Verifica o objeto dom
///
///
///
string estática pública CheckDataXml (documento XmlDocument)
{
XmlSchemaSet xsd = new XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Esquemas = xsd;
tentar
{
doc.Validate(new ValidationEventHandler(XmlValidation));
}
pegar (exceção ex)
{
retornar ex.Mensagem;
}
retornar nulo;
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html